JavaScript



JavaScript
 !"#$%$&'()*+%, !"#
-./!012'!3 4!.5678269:'$6;<!0=6
'>?%%@1!A!%(?B4CD 5EF*!JavaScriptGH 2I1B(J
K!?!%(?L!.#MD%N%',!,:'>!FB?B4 4O@5 D*!?%1*
!%/P973Q%?!.!'36!%(?L-?'.?.Q
'>',%?'?R!S82BT?UVW2
X6!SR!%(I12IJavaScript62
'>-?P!.!%(*+%,W3YBILZ62JavaScript[%!6!0\!(E])
!./3$'>-?'^.G _!?!
])!.F
R!%B`5%R!%(I1JavaScript EnlightenmentE]!QCody LindleyI6
V$ EM M
VM$O'Reilly!]X,Xa30FP_?WbGI92F'?5%?'+/0cI1 M
 D
VN$
F&d!V?'Q95?F `
e9R!%(I1Creative CommonsP=0QN?/M$
-<?!Fe9% !Af  Attribution-NonCommercial-ShareAlike 4.04!?
5e9%I1B<2'S3QcI1
'!gGW(W2526R!%(-?*!?hFEi?]2'!.06
F-8%(0(?6'F'%(?3abdallatif.ey@gmail.com'j:
[%6i6 !/3%,
k? 2?SP
',]
4

 
...............................................................3
............................................................14
lR!%(I1 N
#%b!?
R!%(I1OEAB
8Gb!?JavaScript 1.5ECMA-262 v3l
!0\!U)2b!?Date()6Error()6RegEx()l
R!%([/0
-2 `
!?6<2 `
3) 2
(%63VB<( R
W:6[/0% 
'<m'S'FA% K
 :JavaScript........................21
!0\!(O!V$G
'$!n6JavaScriptB\!(B!
+/$N60
'>o!,2 5?!0\!('$!n6JavaScript
*+%/?!.Z D
V0N%!0\!('$!n6
-!?*+%,!F'$!n6O!%,new
'$!n6BO!V$&Q%+?[\
'/62 '6: 
'6:null6undefined6string66true6false!0\!#/
'6:p/0N6W=@+NPJavaScript
'? !?%H6!/%'6:
!0\!(!.!$!0B\!q,L/%,'6:'0?6' 6'Q0
'?62 =N? 
?p M
/0N62W=@+NPJavaScript
'5? !?%H6!/%?!0\!(
'(!0  `
!8!9?!0\!(
-!?typeof?6'6:-?%/N
!0\!(>%F7?/'(!0!8!+
'8!9L?!0\!(?5constructor!.'$!'GVN%
'0j4'$!F4' BYM
V0N!`B\!W!bG!?[S%
'%/?E!8!9'$!F' BYV0NB\!L?W2B(?
!0\! BF!r%9X JavaScript!0\! 6 Object()
  :.............77
d$2'!f?!0\!(%SW2B(?JavaScript!8!+
!AF!.03%/$'F?!0\!(P>
's*+%,!FB\!(!8!9B'8!9'?nQS62tS62ug
o:62u0
!0\!(!8!9vI]
B\!(!8!9G!)&W!%,'3
'*+%,hasOwnPropertyE`'F!!0\!(]2'8!9=W2[S%
-!?*+%,!F'0j'8!9B\!(%SW!WG[S%in
']*+%,!FB\!(!8!96?for in
'0?wN?!0\!(6Pw?!0\!
'%(*+%,!F!0\!(-!%'^B/SUnderscore.js
! " :Object()...............................103
!0\!*+%,B'x$'S?Object()
'$!'r!Object()
 5?n66!8!+Object()
d$B!0\!( 5?n66!8!+Object()
!0\!O!V$GObject()Q%+?'!F
BK!0\!(?5Object.prototype
! #$:Function().............................113
!0\!*+%,B'x$'S?Function()
'$!'r!Function()
 5?n66!8!+Function()
d$B!0\!( 5?n66!8!+Function()
!'?!6 n6N
!?-T<?N!?$G6/S'A0H]Gn6#/
' Gr!??
W!%?this6argumentsn6?AW!%]!%
'8!+arguments.callee
'8!+length'8!+6arguments.length
'r!P !G
'I30O!>G2 !1I30O!.%$-'B'? !G 
AF62'AF'?62'$!F' 'P 
62'$!F'62B\!'62' !' 'O!%, call()6apply()

'.A?n6

)!!./3$%/%AF'=N?n6

)!!./3$%/%'.A?n6
n6jVB(?
n6Bn6 !G6n6Gn6?
!.3-n6O!%,
 6!%I30% !./3$%/W2'B(? 
%&$! ':....................139
/\B\!(*.3B'x$'S?
/\B\!(B?g 5?'!n6
'!>%?6!8!+6/\B\!(
/\B\!(G!)&
UgF !EG!VNX6!0?g/\B\!(*M+%/N
()*+,-. /0&:this....................147
*+%,B'x$'S?this!0\!(GVNP6
'? =SNPthisl
"AS?'?(this'V%?n6/\B\!(GVN
n!A?'/,'V%?n6'(Vv!3%X
'?(S%this*+%,!Fcall()62apply()
"AS?'?(*+%,this*+%/?-DB'=N'$!F' -9 
"AS?'?(thisB\!(' -9 prototype'BYV0N?B\!(GVN%,
'$!
1+ #&:JavaScript....................163
X!A?B'x$'S?JavaScript
'%X!A5XJavaScript
*+%,varX!A?BF* !Q% !3%6>%?B7Q%n6-9 
n!A?'/,
!.M<N'?n62n!A?'/,N%,
!.\!%,0a6'PO!0y2n!A? =SN,
n!A?'/,1!.,'>?F!%
-2 ! :prototype.-#..........176
'/,B'x$'S?prototype
'8!+F%.$W2!0b!?prototypel
n6:/ 2
$!</ R
t!</ 
F/ K
'8!+prototypen6?5 5
'8!+prototypeB\!1'g%XObject()
'8!+F`'sF'$!'BY M
V0N?p/0prototype'$!''F!%
'/,'S9^prototype1Object.prototype
'/,prototype'//!.M<N'8!9n62N%,
'8!9-prototype'8!9vI]G _,45 4B\!B?gconstructor
'g%X
B!8!9K%!0\!(prototypeK]2!6 -QS%,
'?>prototype!F!,Y M
V0N?p/0tSG _B54B\!G
B\!(B'y*+%,*+%/?B'=N?'$!n6B(?prototype!?
',!,:'$!n6
'y6-,r,O!V$G
!* 3:Array()...............197
!0\!*+%,B'x$'S?Array()
'$!'r!Array()
 5?n66!8!+Array()
d$B!0\!( 5?n66!8!+Array()
!3Q?O!V$G
!3Q?tS6'!gG
'3Q?ns6o!.3
'8!9b!3QO!V$Glength!/'=N
'8!9uglengthvI]62'!gGG _
 !F: %!3Q?2 H92 4!3Q%S%!3Q? 
!396!!2'3Q?8!0W6
-34& $5:String()..................211
B\!(B'x$'S?String()
'$!'r!String()
 5?n66!8!+String()
d$B!0\!( 5?n66!8!+String()
06 $7680,:Number().....................216
B\!(B'x$'S?Number()
'V :6'SSQ :
'$!'r!Number()
 5?n66!8!+Number()
d$B!0\!( 5?n66!8!+Number()
-9 $76 :Boolean()...........221
B\!(B'x$'S?Boolean()
'$!'r!Boolean()
 5?n66!8!+Boolean()
d$B!0\!( 5?n66!8!+Boolean()
'?b'6:f'0?!0\!(falseGnS%%,true
O!):zFfalse'6true
0::6-::::34&:::: $76" :
--9.....................................228
!.!8!9Gn8n6!S$!0!0\!G'6:nS%%,
'j6:'0?6' 6'Q0*+%, !L
- $76#$:null..............................234
'?*+%,B'x$'S?null
-!?typeofN,objectnull
- $76':undefined...................237
'?B'x$'S?undefined
'+/$JavaScript ECMA-262>%?vTN cF!6 t!<8& undefined
*!n!A?
-;<$ $76/0&:....................240
B\!(B'x$'S?Math
B\!(n6 6!8!9Math
Math
'$!F' #/
B\!(Math!.%?>%/X#FyL?
-=$ >,.:.........................................244
-4  >,.:.......................................249
!
.?JavaScript
?Q%{!?$2BaR!%(I1JavaScript'0\!'A|b?$d!BX6
'>E5%JavaScript'>'\@?!FP%!F%(a6JavaScript7g%62
62'A!F.<]}!+)m!.=
5a6
r!)!5W(W2~M%3X6!.F
B!Z)WXBILZ62JavaScriptJBj42"!A$& 49%S!F!%aI16
-B%'F!/%(d$2?A
B' x$•!O!G1R!%(I1'F!%BgfJavaScriptnr9B
!0\!(v!V(%,JavaScript?-<!.'!637g6
complex values'6:6 primitive valuesn!A?6 scope'y6
inheritance/\B\!(6 head objectQW(W2R!%(I1BgfW! pG
'38Bt!<8€4'.34'8r9%S6ECMA-262'sE@TY,6
!0\!(JavaScript
M
#+%,62!??Q M
#0bGJavaScript-< !%(?O!#SN-BjQuery
62Prototype62YUIB'%(N?%4TBR!%(I1H%SLTSW25Y pG 
!%(JavaScriptT GJavaScript
" #
$%&
!!??%2X6!EWT6 2/30R!%(I1 N
#%0=$2v%2W2'Fj
';R!,:G'!gG b
zF3W(% ,:•60Q '"r%K6]B!%(?- T./N
($ 2L?XL0(O!36'/F:I=30N%, #x'y!B(W!]:
15
.?JavaScript
B4'%(*+%,X N
u+ 4e+)=2=W21'S b!?62Lb-'3B
!%(JavaScript|b?$‚ D
V0N!062 6[0!0 4-?4!sG62
Lo!,26qTS-?'3.36!%/O6!Gx0W2A u/F-A/
3V%(6!!?!%/S@W2W6BI `,!0R!%(I1 '%(?
*+%,!FJavaScript!./3$
TMozilla'+/0!y=SN
r!!56
r JavaScript 1.51EQ0!=W2%2J
W252 %?5?.!/4]64x$D'.56B `R%(6`*.3`0%/
cI-' jQ3?f1!3?6!?
rD9MR!%(I1W(
Mozilla
'+/$BJavaScript5!!gGc!A*%$!00('s%35%%,
Bo !/8&-< '!%8&'>ECMA[Ty62W2 N
 2I
',!,:1!3?JavaScript
N
#%,!cT$Y,6>%W2-?%S?fB%
!r%9XG
3VB4'x$4'<YF`'Z'A!>BKS%%'%?'0%%(
(3.G•!-8IQU)g6- T
w2!$2 <4V]%S6
!
A.0R!%(I1 N
#M= )!E>VB(?I] 4
?4n!<?F!%
4-YFUMVN!F!%,-.,26-26>821!3G?g?•T@A
'Q34'<YF'6!?(B 4B(?
%'f2B+yJavaScriptB<2O[S%/%5!.f26,
16
.?JavaScript
W6 '?.?:ƒw 4
R!%O!V$G N
 200(J!.!+%,6!.%$!(!.'Q3
<'g!3%,X
'()*+,-.
T62!,!,:!F?•%?1d$n62 }!+):BB$G `E5R!%(I1
JavaScript!0\!(E?.3F'>!FE%W2Iu,%JavaScript!?.
!%(*+%,+1$!<d0 !?JavaScript!Gx0@1!5782I
!%(62'A AB!,!0aR!%(I1 !%/O6JavaScript62
vj% 2BM?DJavaScript
/01&JavaScript 1.5ECMA-262 v3"
8GR!%(I1@TY,BJavaScript‚!(I ECMA-2628&
8&K=SN, W;]G!S3Q%?!8G<218&I1 =W: t!<
B8G9^ 5?!!g&6!<S%%S(R!%(B* !
ECMA-262
23%456&Date() Error() RegEx()"
'>!Q3!5aR!%(I1!F!, N
b!?JavaScript!0\!(@TN,!?$G6
.q!/%,%JavaScript!0\!(U)2 j
X2 N
IDate()
6Error()6RegEx()@B!0\!(cI1-8!3j=W: (!.\!Bf
!0\!(L?.Be062JavaScript?5R!%(I1E?%%,![TNW252
17
.?JavaScript
'ZF 5?!0\!(JavaScript
782
%SE$:/I1+%XO!5R!%([/0's.3W2.?B2W2-
R!%(I. MLDOO!0y2q!/%,4'?. 4!
.


!Q+) 3V!F `
[S$!yYUVGx0W2A 'F3Ve j
S3O!5
eS3%W2LbG'L]UV "WG[X '?P26!/3V =W2H2
I(362*.3?7QW2G'?cI1T(6H92!%2W263V
4'y43)GXG|!%Sr(+B4']G-QW252 !
Sg6E])n6!]2
'A1!3?]2%/(5!y
.
00(Lb[S%,2!?F '<:'g!3%,X6:a3$(%0[!w%%,!?F
OB's> 4!%g2W2B
XFT(6!
w3%/6! W2W2- T
w2
?%Lb6-?B:r=W2H  !W3_?!.%6.!6
-Q3%!F!4dgW6!SBI3,Lb=W2-3>XB(dg?!FL%
.
3)zu+N*+%,Y,JavaScriptG!)€ ;n!<?!?
w3W-?%,Y,6E]V$I*.3?!F)![%%'A,:63V
18
.?JavaScript
!%G!)€7!3
<!DOCTYPE html><html lang="en"><body><script>
// 

var foo = 'calling out this part of the code';
</script></body></html>
3)zFe0B%PgY,3V[/0G'!g&!FJavaScriptL6
n!< !e0BF6!.0F@j?([!f 4
w4WF#F!y 4~b 4u+F[ =
/0N%,3V
B\!!0B(cody'$!'Bc!$YV$2IObject()
4B\!BP%+XI
'$!'*+%,!Fc!$YV$24'Q$4'//String()3VeS3 n!<?-,
cQ2!.3%';]n!<
.!"!#!$%
!.F'8!9'S3QF'R!%(I1'<2'f2jsFiddle3V-g2t]
'<2J)!3VI306-L0(?t] ]n!< W0F!.G!
F jsFiddle
'!gG*+%/Firebug lite-devQ2 „!0~' -?%,Iconsole.logx
v%W2L=W2H2 -!VW6 '<S!S3Q%?'B~>console.log
R!%(I1O-!.+%,'36
!.T/NX!]L!01jsFiddle3)%zFJavaScript!10
19
.?JavaScript
*+%,Y,JS Bin'!g&+%,73Q%? !?%XH !32W2 N
#6!]Firebug lite-
devL?WG!5+?!.…G73Q%? !?%XAW!]:zFB(
LS3Q%consolet]473Q%GE%%FLSQ$Y
20
 9:;<
=>23JavaScript
1
!0\!( n6:-Q3JavaScriptJavaScript
23(?@1
',!,:'0N1!0\!(JavaScript
N
L/624B\!B`!!. 4O)-=W2bG
.3%/!0\!( M
#?.bGIJB\!q,JavaScript!0\!(O!V$G'sGbGx00
JavaScript
B\!(object?/N6 O!?,YF'?B'?A62'6!] A1
!8!+ properties3)'j2Gx0$W2-
X62!0LbR!%,n6!S0
JavaScripte+VPQ$W2!00(? n!<?! Q+)I9Y$W2L2! cody'>*+%,!F
;!4n65'F
cody
!&'!&'!
!Slivingtrue
?age
a0Agenderbmale
'?(cody'? 6 !8!+ B4'?A? `W01[F!/n6A
1!vTN% !. codye+V=W2[F!/n6ABvDMW2L0(? S
codyc?6!Sb16'0,
B(JavaScriptn6AB<!.%0NFP%+B%!0\!(!?$G6n6A-?%/X
22
!0\!( n6:-Q3JavaScriptJavaScript
3)Gcr2n6A 5?!?-SB(? [F!/JavaScript;!n!<
]
<!DOCTYPE html><html lang="en"><body><script>
cody
var cody = new Object();
 !cody"#$%
&'()*% +'#$ +,%-
cody.living = true;
cody.age = 33;
cody.gender = 'male';
// .*: Object {living = true, age = 33, gender = 'male'}
console.log(cody);
</script></body></html>
,!.'8!9-6!8!+!6!] A1!0\!( L01b'?cI1 D
[F2
-D?%/M '?6JavaScript2 4O!?,2 N
b`!. 4!8!9Nw%N'6!S *.3
B% 4O!0FAS B\! JavaScriptB\!(cody!.0 N
=M%`'?1
B\!(JavaScriptE!8!+ 4
 N
O!GyB6!?,DED\!G64B\!(\!V$hF
B\!(']?cI1cody-!%$!j0!j?6J'%F!y 4!XG%SXEV!0$I
23
!0\!( n6:-Q3JavaScriptJavaScript
B\!(„$W:7?$!0=$2_?B?'AF4'>cody!-(XG6 !!Z)-3(
'>8B4'4'0F N
b 4!$!FN! A1E(?$JSON
B\!(-3(6cody!!Z)
' '!gGAmethodn6B W($(6 !'3…F*'L6EG
JavaScriptB\!%S `
!8!91Function()4'?O5G1E0v.W(I
'%SIB\!(
n65tS N
 2bGcody' '!ghFgetGender;!'F!Fn6A6/
cody
'8!+'8!+'?
!Slivingtrue
?age
a0Agenderbmale
getGendera0A'? !G
*+%,!FJavaScript' 6%,getGender;!K=SN?n6A 5?
]n!<
<!DOCTYPE html><html lang="en"><body><script>
!!Q%9 JavaScript Object Notation
N'.,16!$!-!0%-M?%/N`'Q$`'>816
'?B'?\!62 '? ,X |6":B'?AB@+'F!%(6O
24
!0\!( n6:-Q3JavaScriptJavaScript
var cody = new Object();
cody.living = true;
cody.age = 33;
cody.gender = 'male';
cody.getGender = function(){return cody.gender;};
console.log(cody.getGender()); // .*: 'male'
</script></body></html>
'-M?%/NgetGenderB\!(`'8!91% cody !& returnB'?
'?1%B\!(!8!9H]Gmale'8!+'$=@+N?genderW2L!
'%F!<!8!+B@+H,!Z)-3XB\!(!n6  56W6 E=$2E?.3
B\!(codyd0BB\!(!
w2vMNW;Gc!0V!$IObject()B\!!$YV$2
cody'$!'!0E6I†!B\!*+%,!Fconstructor functionObject()
B\!'!]6J!.3 M
[MM
,!0\!% `1'$!n6=W2-+cody!0+%,
'$!'Object()EN%?,2I†!B\!O!V$&codyW!!j?6codyB!0!0\!
'$!'Object()=W2n$W2!00(?codyd0B`B\!1Object()L!
d0B'/F!0\!O!V$G'sBx0z>F E?.Object()-<cody
=W21
 5?'!fJavaScript-<'6: !0\!1/foo/606true1
!]X!12KS%0,6!.'Z!(!0\!5B(!cI.O!0<%,
25
!0\!( n6:-Q3JavaScriptJavaScript
B\!!0B(cody'$!'Bc!$YV$2IObject()-, P%+XI
'$!'*+%,!Fc!$YV$24'Q$4'// 4B\!B n!<?String()3VeS3
cQ2!.3%';]n!<
<!DOCTYPE html><html lang="en"><body><script>
12Object()
var myObject = new Object();
myObject['0'] = 'f';
myObject['1'] = 'o';
myObject['2'] = 'o';
// .*: Object { 0="f", 1="o", 2="o"}
console.log(myObject);
12String()
var myString = new String('foo');
console.log(myString); // .*: foo { 0="f", 1="o", 2="o"}
</script></body></html>
W!0\!(6!?myObject6myString4!8!9!?1rL?W2B(? W!0\! !?1
K62inherit>%? '$!F4' B!?1‡!V$G6 4!8!9 myString%SI
'Q0'//'?foor#QS3bG !%/O6B\!'0FL?E0(5!
/F6
26
!0\!( n6:-Q3JavaScriptJavaScript
:!12 d0!FW!3%+!?.0(H%S?!FWry!?%!.$2ˆ]r%/!Z D
VN$2WIB0\!(
=W2ˆ]rW21JavaScriptB%!0\!(*+%/
ABC.
'?HW2>BA!?Ffoo-,r/=W:B\!-()
-=<?N'Q0JavaScript
r< '62!.=$2 var myString =
'foo';
=2=W2GL1!%$#3'Q$'/,O!V$&B\!!01 N
#+%,
!.$2!.F !(3X%Lb!?F!0\!W(W2B(? 4O)
'0?6 :6'Q0-,r/Q2 !0\! booleanB…26
 4O)- =W2nzb!?.q!/,I1=W2!
w2
JavaScriptB\!1
'>%SJavaScript'$!n6String()6Object()-A'>o!,2
B\!O!V$G'?String()62Object()'>-?%/T? L0( '/F JavaScript
'$!F' P%F;n!<?Lb N
#S =
g6 !F!.y!?'$!Fn6 O!V$G!
w2%/
,!F'8!9Person()!.+%,!F }!+)2 O!V$GBB(?Y,I n!<]
<!DOCTYPE html><html lang="en"><body><script>
 +%'%'345Person6
)789+8
"*2:Person()
var Person = function(living, age, gender) {
this.living = living;
this.age = age;
this.gender = gender;
27
!0\!( n6:-Q3JavaScriptJavaScript
this.getGender = function() {return this.gender;};
};
';'<'$=Person
>9?@*5A$Bcody
var cody = new Person(true, 33, 'male');
console.log(cody);
/*
';'<String()'>C+D?@'@EF
G
9H+I?@
Javascript';'<EFJIBKL<$+8')5MNH
'>C+D',*'==JavaScript*@O
'P','=='$=QR,S@
RB<*<$+6
+=?L<$+8')5MK
T'>C+D';String()RB<*9+BD
T*=U%*@?';Person()
*/
1*'$=String>9?@*5A$BmyString
var myString = new String('foo');
console.log(myString);
</script></body></html>
28
!0\!( n6:-Q3JavaScriptJavaScript
'$!'B(?Person()B(?%!?}!+): 4!0\!‚ D
V0NW2!./3$YF!1!0%
'$!'String()'$!' 4'Q$M-,r/ 4!0\!O!V$GBPerson()
ƒ-2#/
'$!'B'$662String()'>o!,2 5?'$!n6B!1f62
JavaScript
B\!(‚ D
V$N2P=Icody'$!'B !F!,c!0V!$I Object().?B
'$!'=W2'x]rObject()A'$!'6Person()3V1!x
B n6a3$6!8!+a3$E!0\!W!A%0!?1!%( !!?„\!%0a3$W!A%0 cr2
B0\!(=W2W.xWI;n!<?M?/x0codyA6codyB%]a3$
'3%+[\F!?1!$YV$2]n!<
<!DOCTYPE html><html lang="en"><body><script>
2codyA';'<L<$+%Object()
var codyA = new Object();
codyA.living = true;
codyA.age = 33;
codyA.gender = 'male';
codyA.getGender = function() {return codyA.gender;};
// .*: Object {living=true, age=33, gender="male", …}
console.log(codyA);
29
!0\!( n6:-Q3JavaScriptJavaScript
/*
2NV**+cody';'<L<$+ 6
8<%O*
Object():cody';'<6
8BDWX
F
*=@OPerson()
**9+?codyY&Z<5[\2]DB-
^_9'9L<$+%<+;6*2VX
*G*+ !B
new
*/
var Person = function(living, age, gender) {
this.living = living;
this.age = age;
this.gender = gender;
this.getGender = function() {return this.gender;};
};
var codyB = new Person(true, 33, 'male');
// .*: Object {living=true, age=33, gender="male", …}
console.log(codyB);
</script></body></html>
BFN/\ N
vr%9XcodyA6codyB'$!n6!?$G6E/3$B\!(B?(X
B\!(‚ D
V$N2 !0\!(O!V$&'+%/?codyA'$!'*+%,!FObject()'!2
'$!Person()B\!(
YV$YcodyB5!0\!P%H92!.+%,B(?B(
30
!0\!( n6:-Q3JavaScriptJavaScript
d0BPerson()'y6ugG!
w2!0\!O!V$&LF'8!9'$!Fn6 O!V$G _,
'/,-?%/prototypeprototypal inheritanceB\!(p/0Person()-T
Q3N0,[X
!]XLb
.)2!?1W!%F!/W!%J?B\!(a3$O!V$GGBF!/BSr _,
!0\!(O!0'?%/?[\
'>JavaScriptO!V$&'?%/?6'>o!,2'$!n6zF'?SY`'>1
62n662'Q0-,r/62 :
r< B4 =SN4d$BTN%!0\!
!0\! *!+ ? G'!g&!FJ pG !3Q?62!0\!(  Function()%
r< !0F'8!9'$!Fn6 O!V$&!.!?%,!00(? Person()x0z>F '\!.0'A%06
B\!O!V$G1 B\!(O!V$&-?%/?u?0B
!.%s6!.'Z!(?'6:6!0\!(O!V$G's.R!%('F@TN%,
!.+%,6
=>@ JavaScript-3-. D
E8@ #
 =2
!..3?F Bjq,6 4!8!+Fq!V%%!0\!TO!V$G1'$!'6
n6 6'g%e\!Q9!.!0\!O!V$&!((!EV'$!'u =
/N?
!.'F!
'LB( M
#82
r\!L Y/ `' !`' XG1!N'$!N' M
#bG
"AS?'?(*+%,!F%/N%,new
r< new String('foo')KS!06
-D!N%,6! 8!96 'LI9Y%/LbJavaScript'?uwF'8!9'!'L
31
!0\!( n6:-Q3JavaScriptJavaScript
"AS?'?(this}!+q/G'!g&!F6 Y M
V0N,IAB\!(G'L%
2 !<]MYV0N?MB\!(N'cI1%,[F!/this'?B
XF!g%false
EYV$2%'$!'`'F!`'+/$E=$2M%N,'B !N?AB\!(6
'$!'I9Person()3V!%2?cI1B(H92n!<?
"AS?'?(yYLBjN%,!.$:Bj?%F';new]n!<
<!DOCTYPE html><html lang="en"><body><script>
/*
'<Person`<$+a>bE
;X
G
2BO'%'3?
^_9'9new
*/
var Person = function Person(living, age, gender) {
^_9'9thisU
E
*G
+]<5<_?
]D-this = new Object();&
this.living = living;
this.age = age;
this.gender = gender;
this.getGender = function() {return this.gender;};
^_9'9%'<ZQ<=G
<*new
'9c3G
=@this6
8<%false
};
32
!0\!( n6:-Q3JavaScriptJavaScript
'$=Person +%cody
var cody = new Person(true, 33, 'male');
cody'$=B2Person()
console.log(typeof cody); // .*: object
// '%9cB'[<"#$.*
console.log(cody);
// ';'<'*G
%de.*
console.log(cody.constructor);
</script></body></html>
2 *+%/?-DB'TN'$!F' -?%/'F!/3VPerson()B\!(O!V$&
cody'$!'n!?%,BP%+XI16Array()d0BB\!O!V$&Array()
r< new Array()
<!DOCTYPE html><html lang="en"><body><script>
'$=Array +%myArray
var myArray = new Array();
>9myArray';'<
U*
2Array()
.*object"*2?"@,9Of_=8g
console.log(typeof myArray);
33
!0\!( n6:-Q3JavaScriptJavaScript
console.log(myArray); // .*: [ ]
console.log(myArray.constructor); // .*: Array()
</script></body></html>
'f2JavaScript?/!62 B\!O!V$GB?w% '6:!
instantiation '+/0!F '$!'B !N?B\!(?/ '$!'B instanceI9
O!V$&'$!n6*+%,'sLI6!]r8X6Š!3:cI1Y%L%6
!0\!(
FGH6=>'I23@ JavaScript
'>%SJavaScript'0=?wN62 '>o!,2 5!0\!('$!Fn6 /
-DB!0\!(cI1-M?%/N !.JavaScriptLEQ2 O!0 7Q6'>O!0
3)!0\!(B%*+%/N%!0\!(JavaScript@T%!
w26
'>o!,2 5?!0\!('$!n6=Wh!%!F6 '>@BJavaScript1
!/?!.!?%,!
w2B(?B(6!0\!O!V$G%/!.=$2$A %`n6
B`Y M
V0N `
!0\!1n6n!<?-, 'A!>!.3%:B<(O5G
'$!'Function()%/N!0H92!0\!O!V$G!
w2-M?%/NW2B(?!.0(
"AS?'?(*+%,!F'$!F'new
'>'0=?wNY%!0\!('$!Fn6 /%F'?\!cI1JavaScript
34
!0\!( n6:-Q3JavaScriptJavaScript
Number()
String()
Boolean()
Object()
Array()
Function()
Date()
RegExp()
Error()
'>JavaScript%'6:G'!g&!F 'F!/'/%!0\!( ! '0
'0?6 :6'Q0-,r/1boolean1-Q3%!F!0\!(L.
'>'\!0<%,X'AB !3%,rU!%3?JavaScript'>'$6HL",6
!.O!36
ABC.
B\!(Math B!, `B\!E=$2bGOVzFfB\!1 static
XF
%(W2%/XL=$20I16'$!F' E$Bvar x =
new Math()
r< -B‚j.NE=$2!?E+%,%/L0(
Math.PI6MathO!?,2n!A1object namespace
'>B `
{wJavaScript!g!!F0N%n6B?w%
'>F'0=?wN?!0\!(JavaScript!0\!(!F W!]:zF!.G!VN
'! global objectso!,2`'0j?w6*+%,r`']!% `
!0\!!.$:
'>JavaScript/\B\!( 7Q?F7Q?I1Lu%+XB(
35
!0\!( n6:-Q3JavaScriptJavaScript
*! head global objectH%/2 5?B\!(1I
n!A?'/,scope chainB\!(
r< window?5 5?
!]X-Q3%!F:I1BKS%0, !S3Q%
'$!n6Number()6String()6Boolean()!0\!(0X
6 :6'Q0-,r/'62!?!
w2T!?$G6/S
M
#%, '$!'O!%,'s !?%Lb6J'0?
4
B's!/F M
j!2J `B\! !N/)!'$!n6L
-<'6: 3V4'04'?624'Q$4'/,6206/foo/
6true4B\!B
XF'62'?'$!'N%/
JE8!K L
?2 #
=23@ 
'!0\!V$G0!F!,#2!?Person()U?/?BJavaScriptn6O!V$G
B\!(B'+/$B<2O!V$&!.+%,!00(?%!0F'8!+'$!
'F'.)'$!F' ;n!<?LY,Person()'F!/]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function(living, age, gender) {
this.living = living;
this.age = age;
this.gender = gender;
this.getGender = function() {
36
!0\!( n6:-Q3JavaScriptJavaScript
return this.gender;
};
};
var cody = new Person(true, 33, 'male');
// .*: Object {living=true, age=33, gender="male", …}
console.log(cody);
var lisa = new Person(true, 34, 'female');
// .*: Object {living=true, age=34, gender="female", …}
console.log(lisa);
</script></body></html>
r!?%Fˆ]r!?parameters'$!'O!%,0Person()
B3%/W2B(? }!+):'F!%3!0\!(B O!V$GB'./FB(?%%/
'3%+FB(!8!+a3$!.!0\!'yryB<2O!V$GG|!%S!0<I1
E3!I1:j(3%0j1JavaScript'!J!.'0=?wN?!0\!(!.!0!!?
'$!Person()'$!'!.%%• !?a3$%Array()P%+BInew
Array('foo', 'bar')B<new Person(true, 33, 'male')n6O!V$G
E+%/Iu?0a30L!XG1!LF'8!+'$!JavaScript'$!n6
!.'0=?wN?!0\!(
37
!0\!( n6:-Q3JavaScriptJavaScript
ABC.
"AS?'?(*M+%/N%,'$!Fn6 O!V$G0B/S%/?Bnew
r<',Bn6:vS-A$W2Person()B
XF
person()!!5GaLbB(J
'?*+%,1!.Gc!%$XL%O!):]2this'-9 
!.?%/!06J!((/% `!XG1!'$!' =W2=I
"AS?'?(new-9 '=N?6!8!+L?!0\!‚ D
V0N%/
"AS?'?(-?%/$!06 '$!'new'?(=W20I.
"AS?thisO!0FY M
V0N%,% '+/062 B\!(GVN
bG9;$!AB( '$!'-9  5?'A!?%
"AS?'?(*+%,W6 !.%%,6'$!F'  M
YV$2newV%/
'?this R: B\!(G parent[X '%SI
'g!3%,!FLb- T
Q3N0,o !/-Q3
"AS?'?(*+%,B0>%/$W2B(??Bnewn6*.36
'04'F'cI1M%(NW2AB(J!0\!N4'!0\!V$hF'$!
d$BB\!O!V$&Object()E !G6
var myFunction = function() {return {prop : val}};
:.JEH@ (Hnew
'swN!0\!O!V$&*M+%/N!((% `!1!. 4
*.3u/FYF'$!'
I9Y0 !/String()-!?-M?%/N!0 'cI1Jn!<?-, operator
new2 newString('foo') !  !?%'Q$'/,‚ D
V0N%, String()
';3VGx00]n!<
38
!0\!( n6:-Q3JavaScriptJavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myString = new String('foo');
// .*: foo {0 = "f", 1 = "o", 2 = "o"}
console.log(myString);
</script></body></html>
'$!'B!Q$!0\!cr2!$YV$2String()BTN$W2!0%,'cI.F6
'jQ$4'?JavaScript
ABC.
!.'Z!(?'6:B
XF'$!n6*+%,LU%2X!$2
-<var string="foo";KSI!.3W2200(
'6:a
'>L?!F!, N
b!?6JavaScript'>o!,2'0j?wN?';/%'$!n6
Number()6String()6Boolean()6Object()6Array()6Function()
6Date()6RegExp()6Error()'F!/n6B'$!F' 'j2B!0\!‚ D
V0N$W2!00(?
-!?*+%,!Fnewo!,2'0=?wN?n6B!0\!'/;n!<?‚ D
V$NY,
'>]n!<
<!DOCTYPE html><html lang="en"><body><script>
39
!0\!( n6:-Q3JavaScriptJavaScript
L<$+%'>%'*F
9hG
'%'32'$=new
var myNumber = new Number(23);
var myString = new String('male');
var myBoolean = new Boolean(false);
var myObject = new Object();
var myArray = new Array('foo','bar');
var myFunction = new Function("x", "y", "return x*y");
var myDate = new Date();
var myRegExp = new RegExp('\bt[a-z]+\b');
var myError = new Error('Crap!');
i%bc'%'3'F
5Dde
console.log(myNumber.constructor); // .*: Number()
console.log(myString.constructor); // .*: String()
console.log(myBoolean.constructor); // .*: Boolean()
console.log(myObject.constructor); // .*: Object()
console.log(myArray.constructor); //.*: Array()
console.log(myFunction.constructor); // .*: Function()
console.log(myDate.constructor); // .*: Date()
console.log(myRegExp.constructor); // .*: RegExp()
console.log(myError.constructor); // .*: Error()
</script></body></html>
40
!0\!( n6:-Q3JavaScriptJavaScript
-!?!0+%,0new T
/3D+N$!0$hJavaScript'BB\!O!V$G$!0$2
'$!'n!<?-, E0'?'$!Date()#!0\!O!V$&-M?%/N
'$!' p!%6Date()„%0!.=$20I16 p!%6#!0\!( !  A1
'$!'Bv=N?g%Xu?0*+%,!F!0\!Date()
'>!F'0=?w'$!n6B!0\!(p/$O!V$G'!%/W;W(W2A
-<new String('foo')-< *+%/?!.=%'$!n6B6
new Person (true, 33, 'male')
ABC.
=W2L01IF D
[F2MathB!,B\!1static objectn6'6!]E=$22
-!?!.-D?%/M%'$!F' Ea6 H92new
@ -.(?@M';E73
TJavaScript!.?/$ Q%+[\s literals'0=?wN?!0\!('f2O!V$&
*+%,G'5!SW6 !.new Foo()62new Bar()a3$Q%+?-(V
-!?!0+%,bGY M
V0N,W!IB\!(new1!cI1BO!0<%,X
Number()6String()6Boolean()-3,:'x]r?x$ 
O!V$&Q%+?'*+%, !%W(%,!?F'AF'39L#$!bG
-!?*+%,!F'$!'O!%,!F!0\!;n!<?‚ D
V$Y, !0\!(newyB6
Q%+?'*+%,!F!.'Z!(!0\!‚ D
V$NY,]n!<
41
!0\!( n6:-Q3JavaScriptJavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myNumber = new Number(23); // 2
var myNumberLiteral = 23; // 6*2b=BO'F
BD'53<'9c
var myString = new String('male'); // 2
// 6*2b=BO'F
BD'F
,'9c
var myStringLiteral = 'male';
var myBoolean = new Boolean(false); // 2
// 6*2b=BO'F
BD')(*'9c
var myBooleanLiteral = false;
var myObject = new Object();
var myObjectLiteral = {};
var myArray = new Array('foo', 'bar');
var myArrayLiteral = ['foo', 'bar'];
var myFunction = new Function("x", "y", "return x*y");
var myFunctionLiteral = function(x, y) {return x*y};
var myRegExp = new RegExp('\bt[a-z]+\b');
var myRegExpLiteral = /\bt[a-z]+\b/;
,$9')5(U
E
*G
9"*EFJD;
42
!0\!( n6:-Q3JavaScriptJavaScript
';'<NU
E
*G
+
console.log(myNumber.constructor,
myNumberLiteral.constructor);
console.log(myString.constructor,
myStringLiteral.constructor);
console.log(myBoolean.constructor,
myBooleanLiteral.constructor);
console.log(myObject.constructor,
myObjectLiteral.constructor);
console.log(myArray.constructor, myArrayLiteral.constructor);
console.log(myFunction.constructor,
myFunctionLiteral.constructor);
console.log(myRegExp.constructor,
myRegExpLiteral.constructor);
</script></body></html>
!0\!(O!V$G'?3+6u T
/NQ%+?'=W21!01EW2LI!
-!?*+%,!F'$!new
O-.,26!
]g6<2!.=$2!1!?F
6 :6'Q0-,r/'6:}Q+F<2:#S82!0/]
XF'6:e\!Q9Q%+?'!FY M
V0N?I9Y%,X!SL '0?
-8!3%-3,:'x]r?x$ ?!0\!(B
43
!0\!( n6:-Q3JavaScriptJavaScript
ABC.
'0?62' 62'Q0O!V$&'/?'*+%,0
4d$-!%%,H924!F B\!('?-M!N%]``B\!Y M
V0NB
!8!9nQS62n6 *+%,n6!SW2GBC62
r< '$!'!F' var charactersInFoo =
'foo'.length‚ D
V0N%/LbKS!06JavaScriptO%]X!0\!
Fy B\!('?-D!W2L7%!?a('j6:'?
-D?.N%/'L\!%,JavaScript'j624'?G'? %,6B\!(
!.$YF'0?6 :6'Q0-,r/'?/O6/1I16
u+6a[,!7 T
gW252 '/F 62 'j62 !$!Fd$2
O)- *.3?-9B„!0JavaScript 4B\!B`!
O)- *.3?JavaScript
4B\!Mq, MLD/MW2B(?
8 6  9
M%N06jfooj6ture6false!
w26null6undefinedJavaScript
1'Q0'//6*!:B'?A1 =W22 n@%9r4'F!Nf!.$:`'62`!.=$2
W(W2!G'0?6v!S?B'?Atrue62false6null
6undefined A1null62undefined!?-T<?NX6!.%F'/FcI1
H92 4
BWj(%62PY%W2B(?
62'0?62 :62'Q0-,r/#$!bGL/3$nY,6';3Ve j
S3
null62undefinedd0B4'+/$BE!?FLbW!yJ<27QW2B(?
Object()62Array()9^4j4B\!ƒ262]n!<
44
!0\!( n6:-Q3JavaScriptJavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myString = 'string';
var myNumber = 10;
JJD95tureBDfalse
var myBoolean = false;
var myNull = null;
var myUndefined = undefined;
console.log(myString, myNumber, myBoolean, myNull,
myUndefined);
/*
cX
F
<J5JD95"@,9T6
<)6*2EFJDF
$
K cX
F
<'F
<)'9_k;,+SEFD?*5BO'F
BD
*/
var myObject = {
myString: 'string',
myNumber: 10,
myBoolean: false,
myNull: null,
myUndefined: undefined
};
console.log(myObject);
45
!0\!( n6:-Q3JavaScriptJavaScript
var myArray = ['string', 10, false, null, undefined];
console.log(myArray);
</script></body></html>
'>']!%?!?62!?B4-() M
u/F2-T<?N'j6: 5 `
u/F:
JavaScript
ABC.
'?O!V$G0 u j
/?-(V!F!0\!(O!V$Ga( String()62
Number()62Boolean()"AS?'?(*+%,!FnewYM
V0N,4I\0
`B\!
!0\!('$!n6=W2.3W25.?BString()6Number()
6Boolean()
D
O!V$&-M?%/NW2B(?% D
~>N'\!0y`'$!F`n6 1
!?\  4!0\!NX'$!n6cI1 =N?GD'!g&!F4'j62 4

W6 #MD%,NWG?B\!('?!62
r<?MNW2%/!?$G6
-!?*+%,new
 9null undefined string  true
false23%$8
null6undefinedG62'$!F' G
r82|!%SX%65`'/F`1
46
!0\!( n6:-Q3JavaScriptJavaScript
-!?*+%,new'?!.!?%,XJavaScript*+%,Xnull62undefined-(
rD!N#$!!?!.!?%,1EG|!%S%,!operator-,r/ '!'6: 
4'$!F4' B !N!.=$2Bf!0\!#/ '0?6 :6'Q0
!0\!'F6'6:BF•3;n!<?7 T
g6Y,JavaScript!.'0=?wN?
]n!<
<!DOCTYPE html><html lang="en"><body><script>
'BI )L<$+<*"*2'F
5DU
E
*G

^_9'9L<$+L<l78new
var primitiveString1 = "foo";
var primitiveString2 = String('foo');
var primitiveNumber1 = 10;
var primitiveNumber2 = Number('10');
var primitiveBoolean1 = true;
var primitiveBoolean2 = Boolean('true');
.-<2Utypeof6*2b='BI'9)EFJD&
console.log(typeof primitiveString1, typeof
primitiveString2); // .*: 'string,string'
console.log(typeof primitiveNumber1, typeof
primitiveNumber2); // .*: 'number,number'
console.log(typeof primitiveBoolean1, typeof
primitiveBoolean2); // .*: 'boolean,boolean'
47
!0\!( n6:-Q3JavaScriptJavaScript
9;6
'%6
'3*<$+new"*:
var myNumber = new Number(23);
var myString = new String('male');
var myBoolean = new Boolean(false);
var myObject = new Object();
var myArray = new Array('foo', 'bar');
var myFunction = new Function("x", "y", "return x * y");
var myDate = new Date();
var myRegExp = new RegExp('\\bt[a-z]+\\b');
var myError = new Error('Crap!');
// .*: 'object object object object object function
object function object'
console.log(
typeof myNumber,
typeof myString,
typeof myBoolean,
typeof myObject,
typeof myArray,
/*
9EFJDS;typeof<G
+functionRB<"*2`9_
*/
typeof myFunction,
48
!0\!( n6:-Q3JavaScriptJavaScript
typeof myDate,
/*
9EFJDS;typeof<G
+object"*2`9_RegExp()
*/
typeof myRegExp,
typeof myError
);
</script></body></html>
!?$G6J!0\!#/'6:=W21'F!/3VBE?.3W2L02I
d$2Bd$u/F2-<?%-M?%/N!.=$24'8Q9b'6:
=> 9N82 #
 O P
QE #
%JavaScript
'?, „M!N6W=@+N'6:=W2.3W25.?B face value0I16J
 M
#$=@9bGL=$2/foo/,!F4>%myString'?W=@+N%//foo/!]1!?
W22 'A!?F2!0L=$:l'5cI.`.:b!?nO!/%B( I
!]p M
/0N'j6:=W:L!Y*.3?I1W(W2A
r<!.+/0
>%?'?B`'+/$!%n!<?WT@+N0,myString16X2 jfooj>%?
myStringCopy'?ˆ!S%/'8:'?!0=%]6J!]'?p M
/0N%,6
>%?!.G!VN? '9/0?myStringCopy>W6 !.%? ]n!<
49
!0\!( n6:-Q3JavaScriptJavaScript
<!DOCTYPE html><html lang="en"><body><script>
// 'BD'F
,'9cQ]5>
var myString = 'foo';
var myStringCopy = myString; // <5<mn
>QS9co=
>9?@'EF
A$G
9'9)5<myString
var myString = null;
/*
>9'#I'9)bE
$
X
=GmyString>9Q
myStringCopy>9'9c5<%pq<2U95K
myString>9'9c) !myStringCopyK
*/
console.log(myString, myStringCopy); // .*: 'null foo'
</script></body></html>
Jn@%9r'F!f„M!N6W=@+N'6:=W21!01!.!QG2%(3
>%?'?!0+/$[F!/n!<?3 !.%?-$G _!.G!)&6myStringG
>%?myStringCopy'?!0y=]ymyString>%?F6myStringCopy!6!]
'?B4'+/$myString!.$!6'6:p/$'M%N?';cI1jI '?
?!0\!(!]X!.]V0,%
50
!0\!( n6:-Q3JavaScriptJavaScript
RDIS 8 9
M
#$!bG!07g61!?6 !]!.?6!/WG'?'6:'$!B(?
 %S>%rs %S9^4>%?Frs%M%/JavaScriptB>%?=W2
=W:W!6!/%rs!!?6!/rs2 rstuuu rsbG!?[0-<D?6 1F`2I16
'j6:'Q0'//!$!jfooj'?!.H924'624'Q$4'//Fjfooj„!$ !
w2
2 '?B%6!/%B%//r=W:6!/?1'$!?'?'foo' === 'foo'
'j6:*+%,!F '? !?%6!/? *.3U)Y,';3V
4B\!(FLbW!Y,6]n!<
<!DOCTYPE html><html lang="en"><body><script>
var price1 = 10;
var price2 = 10;
9*<$+f;=%<)]3<2new
var price3 = new Number('10');
var price4 = price3;
console.log(price1 === price2); // .*: true
/*
.*falseEFJIprice3B<)]3<2Q]5price1
K'F
BD'9c
*/
51
!0\!( n6:-Q3JavaScriptJavaScript
console.log(price1 === price3);
/*
.*true-'m9%vB=<)9 )EFJIreference&
K'9)%NB
*/
console.log(price4 === price3);
/*
>9wqprice4x'F
BD'9cQ]
*/
price4 = 10;
/*
.*falseEFJIprice4K<)nn
26
8<%'F
BD6
'9ck;#D
*/
console.log(price4 === price3);
</script></body></html>
!2 '6!/%  =W2B[S%%/'6:'$!0E=$21!01(3
"AS?'?(*+%,!F'0'?62 62'Q$'/,‚ D
V0N$!0new
r<
new Number('10')
'y!?'$!?'A%$W(B/I.6 'j62N'?B
I9:FE0A%/N2aI16 '6:W!$!0!.-QS$%'A%0
2 !.%?FW=@+N%,'6:=W2!%XBFrstuuu rs?W=@+N!?0F
52
!0\!( n6:-Q3JavaScriptJavaScript
!.%5?FreferenceW>%?%S-1 2 price36price4a305
'?
THU8H 92 I ;2
23%!.@.2-3%
!.TS%/'$!F4' B`YM
V0N`B\!!.=$2!?'6:-D!N$!0JavaScript
4B\!G
2 !.0(!. =SN?'?O5G%/(JavaScriptIMB\!(4I\F-D?.N%,
!0KS,!L26'j62!?;n!<?‚ D
V$NY, 'j6:'?G 6EYV$2
!0\!('6:-M!N]n!<

<!DOCTYPE html><html lang="en"><body><script>
'F
BD c
var myNull = null;
var myUndefined = undefined;
var primitiveString1 = "foo";
9*L<$= new'F
BD'9cQ,*+O
var primitiveString2 = String('foo');
var primitiveNumber1 = 10;
9*L<$= new'F
BD'9cQ,*+O
var primitiveNumber2 = Number('10');
>%?d$W!%
rn!<?nTN
53
!0\!( n6:-Q3JavaScriptJavaScript
var primitiveBoolean1 = true;
9*L<$= new'F
BD'9cQ,*+O
var primitiveBoolean2 = Boolean('true');
/*
'<QR#'BtoString()'!Bd9-
object.prototype<*"*2Q )REF
G
+42k&
K"*2G
*/
// .*: "foo" "foo"
console.log(primitiveString1.toString(),
primitiveString2.toString());
// .*: "string" "string"
console.log(typeof primitiveString1, typeof
primitiveString2);
// .*: "10" "10"
console.log(primitiveNumber1.toString(),
primitiveNumber2.toString());
// .*: "number" "number"
console.log(typeof primitiveNumber1, typeof
primitiveNumber2);
// .*: "true" "true"
54
!0\!( n6:-Q3JavaScriptJavaScript
console.log(primitiveBoolean1.toString(),
primitiveBoolean2.toString());
//.*: "boolean" "boolean"
console.log(typeof primitiveBoolean1, typeof
primitiveBoolean2);
/*
EFJIO*U([y+nullBundefinedQ95958
K6
'%6
'3J958BO"*2
*/
console.log(myNull.toString());
console.log(myUndefined.toString());
</script></body></html>
! '6:-'F!/3Vnull6undefined!0\!G!.S
'*+%,%/(Lb6toString()W2F'j62!.82G %,y!.
'I30.%0
% 6 ' P
 #

'0=?wN?!0\!('$!n6JavaScript2 Object()6Array()
6Function()6Date()6Error()6RegExp() `1 complex!.$:Lb6
?W(%,!,2 4-(VF ]6'?B<262 62'j62'?%S
!0\!(d$2P%+BJavaScript!0@+!?A]L?X?=W2n!00(?6J
55
!0\!( n6:-Q3JavaScriptJavaScript
BBjd$SW6 '?j2%SW2B(??!0\!(W=:I!6
'6:!?.0`-%S'3Q6!0\!;n!<?‚ D
V0N0,  ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var object = {
myString: 'string',
myNumber: 10,
myBoolean: false,
myNull: null,
myUndefined: undefined
};
var array = ['string', 10, false, null, undefined];
/*
JJD958qK'z'BI )'M=;%;+Jdc
9*%OS?96
<)T2DZ3D )'9c'F
5D
 )1D'F
5DQ<)9 )9hJD95
?@3m9JavaScriptK&QI?@yD-
*/
var myString = 'string';
var myNumber = 10;
var myBoolean = false;
var myNull = null;
56
!0\!( n6:-Q3JavaScriptJavaScript
var myUndefined = undefined;
</script></body></html>
!1%FP%+%6B'?A1? =W2!01!.!QG2%(3
'6:B!.%0F6
ABC.
B\! 7Q? complex object7Q?FH92 4
%E0=N
'!0\! composite objects'5d$2 62
reference types!.$27 T
g62=W2]Y'1F!SQ?L=W2MWG
'sPQJavaScript'6:=W2bGJ'6:O!0<%,!F
'?!F'5 b#/ reference by value!Z)-T<?NW2B(?X6
!?0F H92 4
B 8!062O@52TB`Wj(!`
O)2 !
'?!F'5 !.?!0\!( referenced by valueW2B(?6
H9:%S
=>'N V
82 #
 6O P
QE #
%JavaScript
'5?!F„M!6W=@+N?=W2.3W25.?Bby reference!0
W0IW=@+N%,'?Wh 4B\!%S>%‚ D
V0Naddress
B\!(!8!9H]G62>%?]2 2 E?,*+%/L$h 4B\!GVN!0
!(3!0<y_,[,! IW0qb 5?'?nQS
>%?!$=@+N!0\!!%n!<?‚ D
V$Y, '?p/$ M
#6!]KS,I
57
!0\!( n6:-Q3JavaScriptJavaScript
myObject>%?'?p M
/0N%,ymyObject>%?GcopyOfMyObjectˆ]r%,6J
>%?=W2copyOfMyObjectIW0B`'+/$!?$G6B\!(B'+/$a'S
B\!(%SI]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {};
-'m9bE
$
X
=G9BO'9)oE
=*G
 reference{)@&
var copyOfMyObject = myObject;
?@'EF
A$G
9'9)5<myObject
myObject.foo = 'bar';
/*
5>9Jz*qmyObjectBcopyOfMyObjectl7|=@O
'#$'9)NJ959EFDfooNQJG
5IO
K
*/
// .*: 'Object { foo="bar"} Object { foo="bar"}'
console.log(myObject, copyOfMyObject);
</script></body></html>
p/0%'6:a( ?2 !0\!( =W21EW2L!
58
!0\!( n6:-Q3JavaScriptJavaScript
'3'?p M
/0NBB(p M
/0N, W062 '5?=W22 '5?!FW=@+N !.%?
G5?62W01p M
/0N,I!F!, N
#!?6 !!%Fp M
/0NX!0\!(=W20I16
W>%?!)2[F!/!0!<6 IB\!(myObject6copyOfMyObjectG
IB\!(a3$
?5'$@+?'?j>N%/'?j>N!0L=$21!01'?.?(3
'?>%%,'F!/3V3 ?'?LG'5?!FVN%>%?
B>%?myObject6copyOfMyObject!?1]2H%S!.KTSN-
ABC.
d0B!0\!-?%/!0String()62Number()62Boolean()
"AS?'?(*+%,!FEYV$2newjB\!GE%]62
!?!0\!(L'$@+?p M
/0N6W=@+N%/a(
B!.0(''6:'!W!(&!FW!%]bG '6:
'5?!Fp/0'\@5!.!<?
B!6}r+%,LA! 4B\!B''+/$O!V$&
Bo !/8&=W2I!FA AB\!(!.g66B\!(
ECMAScript'%SObject.assign()*M+%/NW2B(?%
5!0\!(p/0-'S38!?B4@?
RDIS 8'23
!.=W22 B\!(a3$GVN!0H6!/%!.=$20/?!0\!(W!$!0
X!?.$:B6!/%!$(BBy!?%B0\!W>%H]bh IW0a3$
59
!0\!( n6:-Q3JavaScriptJavaScript
B\!(a3$GWV
!0c!$ 2n!<?objectFoo6objectBar !?16!8!+a3$W!(?
*+%,!F!?.$!$!0B( !!?Wry!?%W!0\!  uuu!$+%/JavaScriptf!?.=$2
By!?%]n!<
<!DOCTYPE html><html lang="en"><body><script>
var objectFoo = {same: 'same'};
var objectBar = {same: 'same'};
.*false
EFJIJS1*%BD )%"*!96
8%?)8
console.log(objectFoo === objectBar);
9h;}J5B=~9BO'm9N9J>9
var objectA = {foo: 'bar'};
var objectB = objectA;
.*trueNQJ55>9JIO
console.log(objectA === objectB);
</script></body></html>
!.W!bG'6!/%W(I 4B\!GVN%>%?=W21!01(3
!?.W!%]Wr%/W!0\!H6!/%W2B(?X!
w2 `7S8a(6 W0 a3$
60
!0\!( n6:-Q3JavaScriptJavaScript
!8!+a3$!%]6d0a3$
.2I W
0X'23
1I16B\!(p/$G _X!/4 544B\!GVNIA>%?
4 ƒ2?B\!(W(W2B(? '5?!0\!(!F?!0\!('?/O6/
B\!(qbj>%]B\!(a3$G!.?5V%,%6!5?Bc]n!<
<!DOCTYPE html><html lang="en"><body><script>
var objA = {property: 'value'};
var pointer1 = objA;
var pointer2 = pointer1;
'#[•X
F
<7objA.property"m9`9m•EF
<G
+BO
]D-pointer1Bpointer2&
objA.property = null;
.*'null null null'
EFJIobjABpointer1Bpointer2NQG

console.log(objA.property, pointer1.property,
pointer2.property);
</script></body></html>
B6B\!P%/L=$:!0\!('(!0 !8!9nQS!F!07?/I16
61
!0\!( n6:-Q3JavaScriptJavaScript
B\!(qbGVN%>%?- K=SN%, 6B\!tSyE!5O!V$Gy
:.typeof'  9R:8 #

-!?-M?%/NW2B(?typeof !N?B(J!.-!%%'?d$ !&
D.xNI;n!<?LbLY,J!0!.%%[%XE0
-!?*+%,B !?typeofd$2P%+]n!<
<!DOCTYPE html><html lang="en"><body><script>
'BD c
var myNull = null;
var myUndefined = undefined;
var primitiveString1 = "string";
var primitiveString2 = String('string');
var primitiveNumber1 = 10;
var primitiveNumber2 = Number('10');
var primitiveBoolean1 = true;
var primitiveBoolean2 = Boolean('true');
€SS;gxqx2.*
console.log(typeof myNull);
.*undefined
console.log(typeof myUndefined);
.*string string
console.log(typeof primitiveString1, typeof
62
!0\!( n6:-Q3JavaScriptJavaScript
primitiveString2);
.*number number
console.log(typeof primitiveNumber1, typeof
primitiveNumber2);
.*boolean boolean
console.log(typeof primitiveBoolean1, typeof
primitiveBoolean2);
<)9 )
var myNumber = new Number(23);
var myString = new String('male');
var myBoolean = new Boolean(false);
var myObject = new Object();
var myArray = new Array('foo', 'bar');
var myFunction = new Function("x", "y", "return x * y");
var myDate = new Date();
var myRegExp = new RegExp('\\bt[a-z]+\\b');
var myError = new Error('Crap!');
•.*object
console.log(typeof myNumber);
•.*object
console.log(typeof myString);
•.*object
console.log(typeof myBoolean);
•.*object
63
!0\!( n6:-Q3JavaScriptJavaScript
console.log(typeof myObject);
•.*object
console.log(typeof myArray);
.*function€S;gxqx
console.log(typeof myFunction);
•.*object
console.log(typeof myDate);
•.*object
console.log(typeof myRegExp);
•.*object
console.log(typeof myError);
</script></body></html>
E !G-?%S?BI„!0!F!?W(W2A-!?I1-D?%/M!0
!.-!%% *2'62#$!O, d$2P%+?
23FY8.20E
!.TN%!0\!(>%F7?/I16 4'(!0  4!8!9BPY%?!0\!(
'>'0=?wN?!0\!('f2G'!g&!F*+%/?JavaScript'!f=W20I16
!0\!(JavaScript'j>N$W2!00(?Lb/F6 #6j2j>N62K=SNW2B(?
'>!/'sw?',!,:JavaScriptXI1 !.'0=?wN?!.!0\!(!$>6!0%F!./3$
-9%!0\^-A$X!0 B( EF!0%5L=W2H26Lb-L020=$20
B(?1!?F
64
!0\!( n6:-Q3JavaScriptJavaScript
'!gG6'>'0=?wN?',!,:'$!n6!8!9B@+W!(&!F =W20I1
!0\!G!!gG',!,:!0\!(G5n6 prototype
'$!'jfY,';3VString()B\!6String.prototype
]n!<
<!DOCTYPE html><html lang="en"><body><script>
/*
';'<Q35AString'#[;
augmentedProperties
*/
String.augmentedProperties = [];
]5 qprototype'3QtrimIT()U@
if (!String.prototype.trimIT) {
String.prototype.trimIT = function() {
return this.replace(/^\s+|\s+$/g, '');
}
/*
',*'==Jz4DtrimIT'@,9Q
augmentedProperties
*/
String.augmentedProperties.push('trimIT');
}
var myString = ' trim me ';
65
!0\!( n6:-Q3JavaScriptJavaScript
// .*: 'trim me'
console.log(myString.trimIT());
// .*: 'trimIT'
console.log(String.augmentedProperties.join());
</script></body></html>
!0\!(=W21E]!wG2!JavaScript!0\!(7?/I16'(!0 
JavaScript''!gG '=4'+/$G!.'>>L$!(hF=W2!
w20I16 n=NW2
trimITB `
O@5I1=W2 M
v(!01ENb!?$G6LbB/S%,2X=$2T200( n!<?
!0\!('sJavaScript

'>'9-?'s M
fbG I]JavaScript75?B(?
Lb-BI]BB( '>B4'QQ+4'+/$-QS%,L=$2
=W2W6%,}!+):'f2=W2q 26JavaScriptW!(2'y!?%
E%
0XU23ZconstructorR1? #
=
!@
'8!+!
w2Y M
V0N%/B\!2O!V$G0constructorqI'8!+a(O6
!0\!;n!<?!$YV$2 B\!(MYM
V$M2%'$!'GVN%6J '+/062 B\!(
66
!0\!( n6:-Q3JavaScriptJavaScript
d$BObject()j>%?!$@+foo'8!9=W2!0SyB6constructor%
c!$YV$2IB\!(]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = {};
.*true'<EFJIOObject()"UDfoo
console.log(foo.constructor === Object);
';'<Qd‚: +Object()
console.log(foo.constructor);
</script></body></html>
IBM62!v2X6 4B\!B4'+/$-?2 N
#0WG'8!+cI1B3%,2W2B(?
W!WGSBB(?Y,'cI.F6 f!.%43)-!2!0! 8Q9 cYV$2
Lbvr962!?$62'3QNB\!(
'>Y%!0\!('f2B!
+/$ N
YV$20=$2;n!<?ˆ]rW2L0(?
JavaScript'8!+'?W!'$!(G*0X'6:*+%, =W2ˆ]X
constructorB\!('6:'?-!N!0]n!<
<!DOCTYPE html><html lang="en"><body><script>
67
!0\!( n6:-Q3JavaScriptJavaScript
var myNumber = new Number('23');
,$9')5(
var myNumberL = 23;
var myString = new String('male');
,$9')5(
var myStringL = 'male';
var myBoolean = new Boolean('true');
,$9')5(
var myBooleanL = true;
var myObject = new Object();
,$9')5(
var myObjectL = {};
var myArray = new Array();
,$9')5(
var myArrayL = [];
var myFunction = new Function();
,$9')5(
var myFunctionL = function() {};
var myDate = new Date();
68
!0\!( n6:-Q3JavaScriptJavaScript
var myRegExp = new RegExp('/./');
,$9')5(
var myRegExpL = /./;
var myError = new Error();
<G
+'z%`9mtrue
console.log(
myNumber.constructor === Number,
myNumberL.constructor === Number,
myString.constructor === String,
myStringL.constructor === String,
myBoolean.constructor === Boolean,
myBooleanL.constructor === Boolean,
myObject.constructor === Object,
myObjectL.constructor === Object,
myArray.constructor === Array,
myArrayL.constructor === Array,
myFunction.constructor === Function,
myFunctionL.constructor === Function,
myDate.constructor === Date,
myRegExp.constructor === RegExp,
myRegExpL.constructor === RegExp,
myError.constructor === Error
);
69
!0\!( n6:-Q3JavaScriptJavaScript
</script></body></html>
'8!9-?constructorvTN0, *+%/?!.TN%'$!n6!
w2
'$!';n!<?CustomConstructor()!0!?%,!F'cI1!0\!‚ D
V0N0,y
-!?new'8!+Gn8BB(?%0,B\!(‚ D
V0N$W2F6Jconstructorn!<
]
<!DOCTYPE html><html lang="en"><body><script>
var CustomConstructor = function CustomConstructor(){ return
'Wow!'; };
var instanceOfCustomObject = new CustomConstructor();
// .*: true
console.log(instanceOfCustomObject.constructor ===
CustomConstructor);
'<Q6
m<+CustomConstructor()
// .*: 'function() { return 'Wow!'; };'
console.log(instanceOfCustomObject.constructor);
</script></body></html>
70
!0\!( n6:-Q3JavaScriptJavaScript
ABC.
'8!9'6:5b!?!%S!?FconstructorGVN%
 !GBf!FE=$21/ !0\!n6LNX!?0F'$!n6
'6:BF'rL!01I%/%,'$!'B('62'?
'j62'?1'\!.0'A%0=W2BfJ'$!n66
*+%/?-DB'=N?'$!'S,X- =
A/N=W2 M
 2bG
r< !]!?,'$!'O!GL var Person =
function Person(){};
2[. \
@ \
I-.D]V
?2 #
.. W
-3%O%&1>7
-!?*+%,!Finstanceof!G TSN$W2!00(?true62false
YV0B\!(W!bG
'0j4'$!F4' B
B\!(W!bG;n!<?[S%0,instanceOfCustomObject'B!0
'$!CustomConstructor!1YV$2%!0\!(*+%,r `7!8-!?I1
-!?!FY M
V0N?6'>'0=?wN?!0\!(6*+%/?new]n!<
<!DOCTYPE html><html lang="en"><body><script>
L<$=9;X
c'EF
@G
'%'3
var CustomConstructor = function() {this.foo = 'bar';};
';'<L<$+%2CustomConstructor
var instanceOfCustomObject = new CustomConstructor();
71
!0\!( n6:-Q3JavaScriptJavaScript
console.log(instanceOfCustomObject instanceof
CustomConstructor); // .*: true
'53"*'\N*%9
true.*•
console.log(new Array('foo') instanceof Array);
</script></body></html>
ABC.
-!?L!?%,0E0{!%]XL`2L!01instanceofE=$21
N,trueB'+/$1B\!(=W2B[S%!.E+%/-
Object'$!'BS0!0\!(-=W:Object()
-D!?N,instanceof'?false'6:-!%!0
r< !0\!GnS%W2B(?% 'foo' instanceof String
„!0false'Q0'//!0#$!!2jfoojn!?%,!FY M
V0N?
-!?new-!?/'$!'instanceof'?true
=W2L!F D
[F2Iinstanceof!0\!(6?!0\!(u-?
!0\!%'$!n6BY M
V0N?
8*0X@I-.]?2 #
.-3%UO6-
>%W2B(?augmented!0\!(JavaScript!8!+=W22 #6j2
!0\!(=W2!F!,!$b!?6 '(!0 JavaScript!0\!(=W20I16 >%'F!
72
!0\!( n6:-Q3JavaScriptJavaScript
!.Q\!Q9>%W2B(?'$!F' B#Z D
VN$2%
'$!'B!0\!;n!<?‚ D
V$NY,Array()'%/'8!9L?cjfY,y
E'F!]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = new Array();
myArray.prop = 'test';
console.log(myArray.prop) // .*: 'test'
</script></body></html>
B\!(!
w2Lb-B(?Object()62RegExp()NXH92'$!Fn6 'j262
'j62!?]n!<
<!DOCTYPE html><html lang="en"><body><script>
6*2<B'>%'*EF
9hG
'%'3'F
5D`@95
var myString = new String();
var myNumber = new Number();
var myBoolean = new Boolean(true);
var myObject = new Object();
var myArray = new Array();
73
!0\!( n6:-Q3JavaScriptJavaScript
var myFunction = new Function('return 2+2');
var myRegExp = new RegExp('\bt[a-z]+\b');
myString.prop = 'test';
myNumber.prop = 'test';
myBoolean.prop = 'test';
myObject.prop = 'test';
myArray.prop = 'test';
myFunction.prop = 'test';
myRegExp.prop = 'test';
// .*:
// 'test', 'test', 'test', 'test', 'test', 'test', 'test'
console.log(myString.prop,myNumber.prop,myBoolean.prop,myObje
ct.prop,myArray.prop,myFunction.prop, myRegExp.prop);
'F
BI )"#[958•S;
var myString = 'string';
var myNumber = 1;
var myBoolean = true;
myString.prop = true;
myNumber.prop = true;
myBoolean.prop = true;
// .*: undefined, undefined, undefined
74
!0\!( n6:-Q3JavaScriptJavaScript
console.log(myString.prop, myNumber.prop, myBoolean.prop);
</script></body></html>
!0\!(=W2=I \!)`21'$!n6BY M
V0N?!0\!(G!8!9'!gG
!0\! n@!'$!n6BY M
V0N?
ABC.
L?W2B(? !.'F!%!8!+Bx0z>F !0\!( =W2L!F D
[F
'/,'y6!8!9prototypeprototype chain!.%!gGB(?62
!0\!('(!0'0LBjI16 'Z.%F'$!'G
JavaScript
23% ->CX^JavaScript23%   Object()
!0\! Ur8XBFu+X6LXJavaScript!0\!('?AGVI
 5?JavaScript!0\!Object()
r< var myObject =
new Object() 5?B `
}!9`d$1%JavaScriptB\!=W2!?
Array()?/%!0\!(B`d$1arrayB\!(Object()%!0\!(B`d$1
?/object'$!'=W21'8r+Object()%6!0\!('?'6!]„D%0N
!0\!(F!.G!VNObject()'$!'E) 4-(VF6Array()B\!„D%0NarrayV$6
!0\!(F!0\!(LGArray()
!0\! Ur8X*+%/0,JavaScript!0\!(?5G!)€R!%(I1
75
!0\!( n6:-Q3JavaScriptJavaScript
JavaScript'f2=W:JavaScript'f2=W2/FI16 !0\!(q,L/
JavaScript!0\!(B =S!$„D%0N%'>!F'0=?w N'$!F' BY M
V0N
B\!=W21cILI!Object()
`?`B\!E=$2bGJB5 `
}!9`d$1
!0\! Ur8Lu%+X6`†!JavaScript'f2G!)€*+%/N?
!.0%B(?%JavaScript!0\!(
76
=@_:;<
0E 23Z.:.
2
!8!+6!0\!(-!% $!<-Q3JavaScript
=>`@6aR'23bO6-
JavaScript0E%
']?/'?'j2?B\!(%SW2B(?JavaScriptn!<? N
YVN$2
B\!;Object(),!FmyObject'f2-T<?N 4!8!9EG N
#3g2yB6
%?JavaScript]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {};
'% cmyObject )';wDT9?
?@3m9JavaScript6
*9
myObject.myFunction = function() {};
myObject.myArray = [];
myObject.myString = 'string';
myObject.myNumber = 33;
myObject.myDate = new Date();
myObject.myRegExp = /a/;
myObject.myNull = null;
myObject.myUndefined = undefined;
myObject.myObject = {};
myObject.myMath_PI = Math.PI;
myObject.myError = new Error('Crap!');
78
!8!+6!0\!(-!% $!<-Q3JavaScript
console.log
(myObject.myFunction,myObject.myArray,myObject.myString,myObj
ect.myNumber,myObject.myDate,myObject.myRegExp,myObject.myNul
l,myObject.myNull,myObject.myUndefined,myObject.myObject,myOb
ject.myMath_PI,myObject.myError);
RB<TO<)9"*1]ITX
9@95
var myFunction = function() {};
myFunction.myFunction = function() {};
myFunction.myArray = [];
myFunction.myString = 'string';
myFunction.myNumber = 33;
myFunction.myDate = new Date();
myFunction.myRegExp = /a/;
myFunction.myNull = null;
myFunction.myUndefined = undefined;
myFunction.myObject = {};
myFunction.myMath_PI = Math.PI;
myFunction.myError = new Error('Crap!');
console.log
(myFunction.myFunction,myFunction.myArray,myFunction.myString
,myFunction.myNumber,myFunction.myDate,myFunction.myRegExp,my
79
!8!+6!0\!(-!% $!<-Q3JavaScript
Function.myNull,myFunction.myNull,myFunction.myUndefined,myFu
nction.myObject,myFunction.myMath_PI,myFunction.myError);
</script></body></html>
%L0(?O)2 GV62 %SW2B(?!0\!( =W21!01E]!wG N
 6!
E0JavaScript!0\!(?5=W2vL=$:[,!#2L$:'V1!FR!Q j
X2A
!
w2[0I16J!1>B(?'>'0=?wN?String()6Number()
6Boolean()-!?*+%,!F#Z D
V$N2!.=$22 !0\!-() !N?new
D,.!2.<8@'23F
!0\!(%SW2B(?Object()6Array()6Function()!0\!
!0\!n!?%,!F!0\!(BA)uwF[,!U)Y, H92Object()]n!<
<!DOCTYPE html><html lang="en"><body><script>
"*6
'=+VX
*59O"*L<$+%4>
var object1 = {
object1_1: {
object1_1_1: {foo: 'bar'},
object1_1_2: {}
},
object1_2: {
object1_2_1: {},
80
!8!+6!0\!(-!% $!<-Q3JavaScript
object1_2_2: {}
}
};
// .*: 'bar'
console.log(object1.object1_1.object1_1_1.foo);
</script></body></html>
B\!(*+%,!F-<D?-B(?Array()62 !F: %'3Q!0„%0,2
B\!Function()]n!<
<!DOCTYPE html><html lang="en"><body><script>
3%I3<'@,Q,*+O"@,94><*
'wd@'@,[3O'wd@'@,[3O'wd@'@,
var myArray = [[[]]];
RB<L<$+%4>RT
'wd@'3[3'wd@'3[3'wd@'3V**+
var myFunction = function() {
// 'wd@
var myFunction = function() {
// 'wd@
var myFunction = function() {
81
!8!+6!0\!(-!% $!<-Q3JavaScript
// 'wd@
};
};
};
1T2D@<)"*2**95
var foo = [{
foo: [{
bar: {
say: function() {
return 'hi';
}
}}]}];
console.log(foo[0].foo[0].bar.say()); // .*: 'hi'
</script></body></html>
PT>N('??Q?!0\!(zF=W21!01',!,:(3encapsulate!0\!(
!AF43 M
[\FH9:
0X-.0X)R; 6c 6de
G)9 6d2fJEH-3
's!GB\!(!8!9B'8!9'?-QS62KS62uwW2L0(?
u0dot notationo:'s62 bracket notation
82
!8!+6!0\!(-!% $!<-Q3JavaScript
y'0F!%B\!(,n!?%,!Fe j
+%%u0's;n!<?7 T
g6Y,
r< !.nQS62!.<S62!.%?ug$%'8!+,
objectName.property ]n!<
<!DOCTYPE html><html lang="en"><body><script>
12Object()>9?@cody
var cody = new Object();
// S#[{;
cody.living = true;
cody.age = 33;
cody.gender = 'male';
cody.getGender = function() {return cody.gender;};
// "#$ cQR,
console.log(
cody.living,
cody.age,
cody.gender,
cody.getGender()
); // .*: 'true 33 male male'
// (;')5M%(G
5"#$ƒ5<
cody.living = false;
83
!8!+6!0\!(-!% $!<-Q3JavaScript
cody.age = 99;
cody.gender = 'female';
cody.getGender = function() {return 'Gender = ' +
cody.gender;};
console.log(cody);
</script></body></html>
!4B\!!8!+'?nQS62tS62uw's.)21u0's
;n!<?-?%,Y,
X!?%,-2. '6gB(!% o:'s!=2
2 nr.%,rFoFB\!(,M%N,t] u0'sB
XFo:'s y
2 •rf€Foy o!%M%rBF '8!+, ]n!<
<!DOCTYPE html><html lang="en"><body><script>
12Object()>9?@cody
var cody = new Object();
// S#[{;
cody['living'] = true;
cody['age'] = 33;
cody['gender'] = 'male';
cody['getGender'] = function() {return cody.gender;};
84
!8!+6!0\!(-!% $!<-Q3JavaScript
// "#$ cQR,
console.log(
cody['living'],
cody['age'],
cody['gender'],
cody['getGender']() // ?@'<<+CcD`
'5*
); // .*: 'true 33 male male'
// (;')5(%6
<mS;‚"#$ƒ5<
cody['living'] = false;
cody['age'] = 99;
cody['gender'] = 'female';
cody['getGender'] = function() {return 'Gender = ' +
cody.gender;};
console.log(cody);
</script></body></html>
U!%3Gn8G M
#A%]bGo:'sB !3%,93%/W2B(?
@U)Y, '8!+,-T<?N'Q$'?%S4>%-!%W2L6'8!9
'8!+Gn8!F;n!<?u0'so:'s*+%,foobar
'8!+,%S`'Q$`'/,„%0%/!D?N
5bGWIB>%*+%,!FLb6
85
!8!+6!0\!(-!% $!<-Q3JavaScript
B\!( 5?foobarObject]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foobarObject = {foobar: 'foobar'};
var string1 = 'foo';
var string2 = 'bar';
// a>{)*')5ML<$+`(=
console.log(foobarObject[string1 + string2]);
</script></body></html>
%!8!9O!?,2Gn8o:'sB3%/$W2B(?LbG'!gG
!TN?'S!8fW(JavaScript
"AS'?6!?;n!<?*+%,Y,
uo:'s*+%,B(?% 'Q$'//!.+%,!F7?/ !8!+ 4O!?,Y
!.Gn8]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {'123':'zero','class':'foo'};
g{)*')5ML<$+**958
EFJDp;%X
%Dclass?@^_'92?JavaScript
86
!8!+6!0\!(-!% $!<-Q3JavaScript
'zero foo'.*•
console.log(myObject['123'], myObject['class']);
U([Q,*=@O{)*')5ML<$+*B7q
console.log(myObject.0, myObject.class);
</script></body></html>
ABC.
fBaH92 4!0\!!0\!(%SW2B(??BW!!j?
H$W2\!Vcody.object.object.object62cody['object']
['object']['object']['object']!0\!('//F?/I16
object chain!0\!(P>H?]5X 
!0\!(JavaScript62tS62ug=W20I16>%'F!
06 #6j2!0\!('f2%W2B(?!.!8!9nQS
r< o:'!0+%,cody['age']!S$W2!00(?
'F%!3Q?Associative Arrays'A!> 5?
H9:
g61EL!-(' !0\!(]2-9 !`'8!9#$!WG
B!?&-
r< !.!2 cody.getGender()'LO!%,X
230XgB
-!?-M?%/NW2B(?delete!0I] B\!(B
r!!I]!8!+vIS
87
!8!+6!0\!(-!% $!<-Q3JavaScript
'8!+;n!<?barB\!(Bfoo]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = {bar: 'bar'};
delete foo.bar;
.*false*@7*IObarfoo
console.log('bar' in foo);
</script></body></html>
ABC.
-!?delete'/, 5?!8!+vISBprototype
-!?*+%,deleteB\!(B'8!9'"&]'1
G'8!+'?ug!2undefined62null'?Bj>N,
!./3$'8!+vI]G _B6'8!+
-30XR1/5MOH<%
n6!S%/!4B\! 5f'8!9Gn8 M
#6!]bGJavaScript<W2
'/,*+%,!F'62'8!+prototypen6!]Y,6'3Q;n!<?‚ D
V$Y,
,!F4'8!9Gn8foo'8!+#$!!?E=$2Bx%,!?F Fv=N%
myArray.fooB\!(!8!9B#/myArrayN%/JavaScript'?undefined
B(J)!JavaScriptB9^BM$!(tS%,Array.protoypeyB6
88
!8!+6!0\!(-!% $!<-Q3JavaScript
Object.prototype'?BfooNW2-undefined]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = [];
console.log(myArray.foo); // .*: undefined
/*
ƒ;+JS?@Array.prototype'#$Array.prototype.foo
?@*ƒ;+ !Y<_*Object.prototype<_B
<G
+n
<% !Y6h5DundefinedK
*/
</script></body></html>
[S%%/!0\!(]2'8!9Gn8n6!]2!0JavaScript'8!+'?B
N%/M'8!+NB\!(L%Wh B\!(B'+/0L%'F!%JavaScriptL'?
'y6'?KSB6'8!+inheritance'/,=W:prototypebG!2 -M?%/N
tS%/'8!+LB\!('+/$%SJavaScriptB\!!.0prototypeF!%
B\!('$!'
Q2 !,! 
F-T<?'8!9!0\!(p/$?5L?__proto__%'!0'
'8!9 S'$!'nQS/uF-M?%/NW2B(? '+/0MYV$M2
prototypeB\!('+/0'$!'
89
!8!+6!0\!(-!% $!<-Q3JavaScript
jS?$A<2]2I1JavaScript
=W2=I dg?5Bj?%$!0 I
'yF!0\!(U!?/0?B6 !8!9E 4B\!B`!1' 'j2 inherit
B\!(!.2
r12 !0!?H9:!0\!(B!8!+B?5q!V%W2L02
B\!(!.(?%!8!+A-3M6J EJavaScript!.'0=?wN?!0\!(?AI1
B\!(*+%,!Fprototype'/,n!?%,%/6prototype
X6 ‚ D
V0N!0!
w2
LF'8!9'$!F
I30's%,JavaScriptB`'?A!.=$2PHW2G'w!fLI
'8!+eS3%$('3Q‚ D
V0N0 /SprototypeRB]n!<
<!DOCTYPE html><html lang="en"><body><script>
>9myArray1n
2Q]5Array
var myArray = ['foo', 'bar'];
'<join()?@'@EF
G
Array.prototype.join
console.log(myArray.join());
</script></body></html>
B!1!$YV$2%'+/0Array()n!?%,n6!S$!06
X6 6 4!8!9L?`B\!1
-< !3Q?n6 H]Gjoin()B\!(L?-1 !0/3$2nY/0 myArrayBY M
V0N?
'$!'Array()'BEF'8!9'+/$join()LbB[S%0l]n!<
90
!8!+6!0\!(-!% $!<-Q3JavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myArray = ['foo', 'bar'];
console.log(myArray.hasOwnProperty('join')); // .*: false
</script></body></html>
B( 'BEF'8!9'+/$L?XXmyArray'G
X86L?join()!?
'/,B!]
X!< M
#2!0/]l!01KSI! E'F!'8!9#$!prototypebG
B\!(4 5Nf4'8!9Gn8!0%,myArray'>#0(?B(JavaScriptW2
'$!'#MZD
V$N2!?J5` =SNW!(?I16 9^ 4W!(!.<Array()'>
JavaScript'#3g2join()D'8!+'F!4'8!+ !1>'!g&!F prototype
'Array()
tS%/B\!(!.(?X4'8!9Gn8 M
#6!]bGL=$2T2JavaScript
'/,prototypeB\!(YV$2%'$!'G
X62x0%,6 '8!+L%4'?B
r< Array'8!+ 5?B\!(x0yprototype
r<
Array.prototypeB\!n62%SbG q!01'8!+AW2#!%,WGH%
prototype?%/%/'8!+LJavaScript%'$!''//!.<SF
'//'!.$G-QW2GLb?%/%,6J'\'$!'P9P
'%/$6H92n!<?Gx00l'//.%0B2toLocaleString()
91
!8!+6!0\!(-!% $!<-Q3JavaScript
myArray]n!<
<!DOCTYPE html><html lang="en"><body><script>
"*]8myArrayBArray.prototype
'<QtoLocaleString()
var myArray = ['foo', 'bar'];
'<toLocaleString()?@'@EF
G

Object.prototype.toLocaleString
console.log(myArray.toLocaleString()); // .*: 'foo,bar'
</script></body></html>
'toLocaleString()B\!(B?g'fmyArrayx0%,IJavaScript
'/,prototype'8!+ 5?B\!('8!+BtS6prototype'
'$!Array 2 Array.prototype'8!+LBtS%,I!
w2q!01!1AB6
'8!9prototype'$!'Object()2 Object.prototype!1A%,6J
T%/W!(?qb 5f'=W2~%306Jq!01JavaScript
=W27 T
gY9
'=f'8!+undefined
!8!+?5#$!!j?6prototype1'//uF9^Wh 4!0\!B`!
Object.prototype'8!95X6prototype!.QS5%H924'$!F4''F!
L!01
`-!`-Q'/,E T
/N0,prototypebGI!.?.-./4>8 4O@52G
92
!8!+6!0\!(-!% $!<-Q3JavaScript
pT
,N(!01G5y-Q3qb2![,!?!Z).36!!?!\!gL/3$ M
56
!4'8!9M<NX!0E=$2 Q%+?[F!/UVB #?.W(W252 E%?.!
MM%N6undefinedW(%/JavaScript!8!9T#<SFprototypeS%
'f'8!+=W2undefined's-<?16!6 KS'F!/tS'?
'>-!JavaScript!8!+!.%'36'y
JEHhasOwnPropertyB60X P
O67
* W
23
[S%!?0F-!?in 5?!8!+Lb!?F!4'8!+Q0qr%B
'/,prototype'=WhJhasOwnProperty*2!'8!9B\!(L?W!WG[S%
'/,B!1I9Yprototype
B\!(=W2;n!<?[S%0,myObject'8!+%SfooKX6
'/,B'8!+prototypeB\!(L%bGnY/0,Lb-36JmyObject'8!+foo
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {foo: 'value'};
// '29'#[
console.log(myObject.hasOwnProperty('foo')); // .*: true
93
!8!+6!0\!(-!% $!<-Q3JavaScript
// prototype '=+!5'#[
// .*: false
console.log(myObject.hasOwnProperty('toString'));
</script></body></html>
'*+%,AhasOwnPropertyB\!(`'F!'8!+-1SG M
#A%]WG
'/,B!.yE=$2*2prototype
JEH2[.0XR-3bO%O17
:.in
-!?*M+%/Nin!G„!02 [S%true!G6false%SB\!(=W2B
=W2;n!<?[S%0, '0j4'8!9fooB\!(` 5`'8!9myObjectn!<
]
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {foo: 'value'};
console.log('foo' in myObject); // .*: true
</script></body></html>
-!?=W2W2Ain?5!?$G6/S =SN?B\!(!8!9tSX
94
!8!+6!0\!(-!% $!<-Q3JavaScript
'/,B\!(!.y%!8!+prototypetS%,I.F6JavaScript%';a30F
!.0tS%/!SB\!( 5N'8!+B(WG6[F!//!1!0])
'/,prototype
B\!(=W20I16myObject'8!+%S[F!/n!<?toString!
w2
'/,Lb6prototype2 Object.prototype.toStringvTN$!0=$2%]6
r< '62'? )!B\!('8!+L myObject.toString = 'foo'n!<
]
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {foo: 'value'};
console.log('toString' in myObject); // .*: true
</script></body></html>
'8!+=W23)9^ˆ]r$toStringB\!('F!#/myObjectE0(J)!
!.yObject.prototype-!?!$+,/I.6inB\!(=W2myObjectL?
'toString'y6?
BJEH-30XR/ for in
']*+%,!Ffor in3V3 ! 4B\!'8!9-6?BB(?%0,
'S*+%/0,';for inB\!( 5?!8!+O!?,2nQScody
95
!8!+6!0\!(-!% $!<-Q3JavaScript
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var cody = {
age : 23,
gender : 'male'
};
key'#[2 +T9LE
<$=G
5>
for (var key in cody) {
'=+'!Bd9"#$]3prototype
if(cody.hasOwnProperty(key)) {
console.log(key);
}
}
</script></body></html>
ABC.
'S`, `$!5L!01for in'??!8!+?Bt]
'/, B\!(!.y!8!9'j2!
w2?%,!?$G6/SB\!(
prototypef2LI:6 'A%0cI.FfWGL=$20I16J
!*+%,G|!%S%/ W!]:if('S-9 'sV
nQS$IB\!('F!%!8!+G-Q%,L=$2[S%
'*+%,!FLb-3$W2B(?6 uE!8!9hasOwnProperty()
96
!8!+6!0\!(-!% $!<-Q3JavaScript
!0\!(-!.(?%
-QI% access%!?\ !a!0\!(GE
a!8!+E M
#=I%!
w26J'S-9 Ev=NI
!.GE?I%[W2!6g
']!8!+XG6?B(?Xfor inBn!<?-,
B(?%!8!+1!vW2B(??B '$!''8!9.x
'*+%,!F!.6?propertyIsEnumerable()
2h #
23 h23%
3)!.I=30N% n!<?-,73Q% 'Z=W2AW2
JavaScriptPw?!0\!(FvMN! !%Shost objectsPw?!0\!-T<?X
![BO@5ECMAScript']!G6q,?% I30%O!0y2!0\!(%!.0(
Pw?!1%'Z!Pw?!0\!Gn8
MM%N73Q%'ZFn!<?-,B\!window!.%S%!0\!(?56
'>o!,2B%?!0\!(!JavaScriptPw?!0\!B
B\!(!8!9LY,window;n!<?]n!<
<!DOCTYPE html><html lang="en"><body><script>
"#[`9mdewindow
97
!8!+6!0\!(-!% $!<-Q3JavaScript
for (x in window) {
console.log(x);
}
</script></body></html>
!0\!=W2ˆ]r!?FJavaScript\!VB=W:Pw?!0\!B?gM%NX!.'0?wN?
'>'0?wN?!0\!(6Pw?!0\!BF!S3Q%?•T3NW2
-T<?N!0\!(L.)2]2=W2 M
Ar!S3Q%?F`'8!9!0\!(L=W:6
0%/-!%'.56HTML!
w2'6? AVFDOM?5;n!<?D.xN0,
B\!(B?g 5?!0\!(window.document73Q%?'ZFcI]n!<
<!DOCTYPE html><html lang="en"><body><script>
"#[`9mdewindow.document
for (x in window.document) {
console.log(x);
}
</script></body></html>
'38=W21!01LESg62=W22IJavaScripta(6 Pw?!0\!(F%.X
c!BF`-8! `
u9L!016 a(!FJavaScript8G
r< JavaScript 1.5
98
!8!+6!0\!(-!% $!<-Q3JavaScript
ECMA-262 v38G6MozillaBJavaScript*!:6b1.661.761.861.8.1
61.8.5!?.0Fu+"AX6Pw?!1%'ZBF6
ABC.
3)-T>VN% 673Q%
r< Pw?'ZFT JavaScript
!/\!0\! !head objectB\!(
r< window73Q%
r< Pw?!0\!G'!g&!F!./3$'>BO@52EW=@+NI
window.location!.TN%!0\!(G'!gG 73Q%
LS3Q%!.T>V%!.%(%3V
r< *+%/?
%6!S3Q%]:'$!Q'V-?%/W2\!VB
 T
/3NPw%/JavaScriptBK]2'+/$JavaScript4@PwNW262
G4'%/ 4!38BJavaScriptF!.' !Q?%%]
8G
r< MozillaBJavaScript*!:6b1.661.7
61.861.8.161.8.5
.JEH23Z.:.i-8
Underscore.js
8GJavaScript 1.5!0\!(-!%#Y!0P\!…zFG%3
-T>VN M
#0bG O!3(F!. G6JavaScript*+%,LU%2W2 6Y673Q%
'%(Underscore.js!1%LB<2P\!…6G|!%S!0JavaScript 1.5L
'%(Underscore.js!0\!(-!%!0';P\!…
!3Q?6!0\!(--?n6cI1
99
!8!+6!0\!(-!% $!<-Q3JavaScript
each()
map()
reduce()
reduceRight()
detect()
select()
reject()
all()
any()
include()
invoke()
pluck()
max()
min()
sortBy()
sortIndex()
toArray()
size()
!0\!(--?n6cI16
keys()
values()
functions()
100
!8!+6!0\!(-!% $!<-Q3JavaScript
extend()
clone()
tap()
isEqual()
isEmpty()
isElement()
isArray()
isArguments()
isFunction()
isString()
isNumber()
isBoolean()
isDate()
isRegExp()
isNaN()
isNull()
isUndefined()
@B3%/!.=$:'%(?cI10AJavaScript!S3Q%?!.?%A
!<S%L%SX%!S3Q%?G'3…a3$#a30F!.0(6'<S
'>',!,:'0>W6 Lb-6JavaScript6w#w%WGXG
101
!8!+6!0\!(-!% $!<-Q3JavaScript
ABC.
*+%,!F2W2-Underscore.js!1X!1%P\!…=W2=Y
'%('j2JavaScript-< L3)!.+%/ -?!sG62 jQuery
102
c_:;<
-3Object()
3
B\!( t!<-Q3Object()JavaScript
23%JEH-A@Object()
'>'0=?wN?'$!'!0!?%,!FObject()'?!0\!O!V$GBB(?%$
generic'FI M
#0bG6 'f! n6:-Q3B\!(!$YV$2!0c!0!I.
codyB\!(‚ D
V0N0codyH92]n!<
<!DOCTYPE html><html lang="en"><body><script>
"#['F
5DJB3†d@2
var cody = new Object();
EFJD<EF
2Ucody†d@?92
for (key in cody) {
if(cody.hasOwnProperty(key)) {
// "#[3mBL<.]D<JDf_58
console.log(key);
}
}
</script></body></html>
'$!'*+%,1!01c!0!-Object()E?,?B\!O!V$&cody
'$!'=W2-j+%W2B(?Object()X'f!!0\!O!V$&!(( 4
/ N!1
'/,B!.y%L!!s !/'=Nn6 62!8!9'j2L?prototype
104
B\!( t!<-Q3Object()JavaScript
ABC.
'$!'=W2cT$2W2 6YL!
Sg6LbB(WGObject()
`B\!1
'$!'BMD
V$N24B\!`'0'$!'=W22 !.bSF
Function'$!'`EF!V:=W2=IB( !(DFN:66J
Array'$!'B(Object'$!(GB-3>X6 'f! 4!0\!‚ D
V0N
-<†!B\!O!V$GB('f!3!0\!(B :L\!V$GcodyP%+
!.!/'=N!8!9g6LF'8!9'$!F' O!V$GB<
B\!(=W2.3W2Lcody'$!'Bc!$YV$2u/FB\! A1
Object()'>B !3%,r6JJavaScript%/ j
X2L
'$!'B'f!!0\!O!V$G'sObject()'3!?$G6/S
r< !0\!(B}!9 P08 O!V$G Person()'.)'$!F' 
'$!'!FObject()
@C..Object()
'$!'I9YObject()
r!parameter'?1-!?I16J]6!!%9
1!.%?=W2M%N/!1 TSNWG6!1O!V$G%null62undefined]n!<
<!DOCTYPE html><html lang="en"><body><script>
// "#['F
5DJB3†d@2
var cody1 = new Object();
var cody2 = new Object(undefined);
var cody3 = new Object(null);
105
B\!( t!<-Q3Object()JavaScript
// .*: 'object object object'
console.log(typeof cody1, typeof cody2, typeof cody3);
</script></body></html>
`'?MTNbGnull62undefined'$!'GObject()'?Y M
V0N%/
'$!'*+%,!00(?!x$I B\!(=?N?Object()'0=?wN!0\!'j2O!V$&
7g%;n!<?x$ '$!F
X6 L?%'> ]n!<
<!DOCTYPE html><html lang="en"><body><script>
/*
';'<L<$+Object()3<B','=+:
K'(9%2B')(*'9cB'3B'@,B
*/
// :'9<2‡5.*
console.log(new Object('foo'));
console.log(new Object(1));
console.log(new Object([]));
console.log(new Object(function() {}));
console.log(new Object(true));
console.log(new Object(/\bt[a-z]+\b/));
/*
106
B\!( t!<-Q3Object()JavaScript
'9cB'3B'@,B3<B','=+`w
';'<;'(9%2B')(*Object()Y
Kpq@'pF
%DJD<5dD?**
*/
</script></body></html>
=>'I  0EObject()
B\!(L?Object()!.y%n66!8!+O!0<%,!F ';!8!+
r< !8!+ Object.prototype
prototype
`@-.23=>'I  0EObject()
d0b!0\!(L?Object()!8!+O!0<%,!F ';n66!8!+
!.y%n66
r< !8!+ var myObject = {}; myObject.constructor;
constructor
r< n6 var myObject = {}; myObject.toString();
hasOwnProperty()
isPrototypeOf()
propertyIsEnumerable()
107
B\!( t!<-Q3Object()JavaScript
toLocaleString()
toString()
valueOf()
ABC.
'/,.%0prototypeObject.prototype?5=W20I16
B\!('F!%n66!8!+Object()GK=%, cr21!x
!0\!?5JavaScript
23%(?@1Object()';E
!0\!O!V$GObject()'?o:*+%,!FB\!O!V$G0Q%+?'!F
r< !8!9W6F62 var cody = {};'FI%-1n6:-Q3!$YV$2!0
B\!(codyH92Lb-30lu0's*+%,!Fe\!Q+c!02y]n!<
<!DOCTYPE html><html lang="en"><body><script>
var cody = new Object();
cody.living = true;
cody.age = 33;
cody.gender = 'male';
cody.getGender = function() {return cody.gender;};
console.log(cody); // '%RB<Bˆ,$y+
108
B\!( t!<-Q3Object()JavaScript
</script></body></html>
B\!(O!V$G =W2ˆ]Xcody!j2J'AF'/?9!0I92E!8!+!?c‡!G6
B\!O!V$GBB(?%0/Q%+?'*+%,!Fcody]6 4
AF4%F[F!/n!<
]
<!DOCTYPE html><html lang="en"><body><script>
var cody = {
living: true,
age: 23,
gender: 'male',
getGender: function() {return cody.gender;}
};
// '#[[\<%'#@3mBL<l78
console.log(cody); // '%RB<Bˆ,$y+
</script></body></html>
!.G !0,G6!.!8!9P6!0\!(O!V$GBQ%+?-(V*+%,!00(?,
BM!?*+%,ˆ]X -.,2!.O-A'F!$!!.…G-23)*+%,!F
6!0\!(O!V$&'0/S%/?'>Q1cI1=W2I!FA ]64
JavaScript-.,2!.O6Q2!.=$:
109
B\!( t!<-Q3Object()JavaScript
'Q$-,r/!8!+O!?,2B%W!(&!FE=$2!
w2W2A]n!<
<!DOCTYPE html><html lang="en"><body><script>
var cody = {
'living': true,
'age': 23,
'gender': 'male',
'getGender': function() {return cody.gender;}
};
console.log(cody); // '%RB<Bˆ,$y+
</script></body></html>
'8!+,B(!'Q$-,r/!8!+O!?,2P6wBa
]2"AS?!?(
r< class
!)G6v]:6*!:!O)2 '8!9v!S62!f%S
X6Š'3/'sV62 
F2

T/NI1=W:B\!(!8!9B'8!99^F'8! 56BI]
!ZFzFY9JavaScript
110
B\!( t!<-Q3Object()JavaScript
-.j23ZObject.prototype
'$!'Object()JavaScript'8!9=W:!.%8Q9!.prototype'F!%
'/,'S9^1!.prototypeprototype chain
B\!(;n!<?jfY,Object.prototype'8!+Pg:fooD
V$Y,y
'8!+Gn8n6!]Y,6'Q$'/,foo!j?6 'Q0'//'F!'8!9!.$2!?
B\!(W!myString'8!+L?XfootS%/JavaScript'8!+L'?B
String.prototype16X2'!%'S?x0%/ !1AB6 !1AWG6
Object.prototype!.tS'S9^1% JavaScript<0,6 !4'?B
'?foo'8!+'? !N%,!%!F6!.%3g20$:q!01foo]n!<
<!DOCTYPE html><html lang="en"><body><script>
Object.prototype.foo = 'foo';
var myString = 'bar';
j.*foo?@3m9jObject.prototype.foo
'=+;S9cQ*,7]Bprototype
console.log(myString.foo);
</script></body></html>
111
B\!( t!<-Q3Object()JavaScript

GO)2'!gG E%$Object.prototypec.…G _,
']for in'/,6prototypeB\!(>=W2n!N/I.6
Object.prototypeE3F7Q0X6B/S%/f`21
112
Z:;<
-3Function()
4
B\!( F-Q3Function()JavaScript
23%JEH-A@Function()
-!?*+%,!F%/N%'AF!?%'6!]1'&-T?NW2B(?
r!?parameters!?%B(?%(O!%,X'?O!0y2B,-9 G
'-?!0'0j 4
Gn8B'-9  5?'A
'BB%+/$;n!<?‚ D
V00,addNumbers-!?-?%/]6new
%/0,6JBM!n!%,B%r%6 .)<:u/?-(V-?%/H9:6
-!?B,?0,6B%&-]n!<
<!DOCTYPE html><html lang="en"><body><script>
var addNumbersA = new Function('num1', 'num2', 'return num1 +
num2');
console.log(addNumbersA(2, 2)); // •.*Œ
‚DBO,$9%'<fE
G
JD6h5D95B
var addNumbersB = function(num1, num2) {return num1 + num2;};
console.log(addNumbersB(2, 2)); // •.*Œ
</script></body></html>
3VI30%4'?x04'Œ!.?%/$W2B(?62!0\!062'?'NW2B(?
114
B\!( F-Q3Function()JavaScript
n6 `
X!?%,L!01 u'AJavaScriptn$n!():u/F2B(
``n!A1N'unique scopeI30%'F!'A!?%B
@C..Function()
'$!'B(?Function()-!9^B(r!?BEQ]X I9YW2
'$!'%Function()'A!?%%S`'Q$`'/,1E!%,
U!%N%,-!9^-'$!'GT?NH92r!N'j2 '/5PTY6-T(VN%
'Q$'/,*+%,!Fr!Tn!,G!
w2B(??B6 r!?Y M
V0N%,%'G
'8!3F!.- MQ3N
'$!'*+%,;n!<?BjFY,Function()' B\!O!V$&{!?$2T
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var addFunction = new Function('num1', 'num2', 'return num1 +
num2');
/*
'#%@ )E
,G
','=+dEF
9G
JD95O5<%n
%
K'< =m5BO';'<RBU2
*/
var timesFunction = new Function('num1,num2', 'return num1 *
num2');
115
B\!( F-Q3Function()JavaScript
// .*: '2 2'
console.log(addFunction(2,2),timesFunction(2,2));
RB<45‚IR‚I%'<fE
G
JD6h5D95B
// >Q3*+i%'345
var addFunction = function(num1, num2) {return num1 + num2;};
// a>ˆ,$?_%;L<$+%'345
function addFunction(num1, num2) {return num1 + num2;}
</script></body></html>
ABC.
'$!'O!%,B/S%/?BaFunction()]2X6)!
=W:!rsGLb-3JavaScript'-?%/%,eval()'///3%
*+%,=W2W6<(%6J''0?'0%S%'Q0
eval()K6]75?B(? M
#D+%,WG6*6@B`\"`1
'A3V'??Q%'0'(V
'$!'*+%,Function()"AS?'?(W6 new,
r< n6!0\!O!V$&'$!'*+%,yYa3$
new Function('x', 'return x')62
Function('x', 'return x')
116
B\!( F-Q3Function()JavaScript
[>` Y M
V0NB closurex$ F!/-Q3'O!%,0
'$!Function()
)!
=>'I  0EFunction()
B\!(L?Function()!.y%n66!8!+O!0<%,!F ';!8!+
r< !8!+ Function.prototype
prototype
`@-.23=>'I  0EFunction()
d0b!0\!(L?Function()!8!+O!0<%,!F ';n66!8!+
!.y%n66
r< !8!+
var myFunction = function (x, y, z) {};
myFunction.length;
arguments
constructor
length
r< n6
var myFunction = function (x, y, z) {};
myFunction.toString();
apply()
117
B\!( F-Q3Function()JavaScript
call()
toString()
. D
) D
. I  #
W2\!VBB(!. 5?!?%IT30N%'/F' O!V$GW!(&!FE=$2 `7S8
'B'Q$'/,;n!<?N0, '?'NsayHi]n!<
<!DOCTYPE html><html lang="en"><body><script>
var sayHi = function() {
return 'Hi';
};
console.log(sayHi()); // .*: "Hi"
</script></body></html>
'?%/'!1N('?S%bGundefined%,Y,
';n!<?yelp'Q0'//%(%jyelpj('?SG'5!SW6 
!1N]n!<
<!DOCTYPE html><html lang="en"><body><script>
var yelp = function() {
118
B\!( F-Q3Function()JavaScript
console.log('I am yelping!');
'9)RB<<+undefined<6
'9c3X
F
<G J
}
.*true
6
<7B3X
F
<G Q7O'9c36
B3f_5SEFI
console.log(yelp() === undefined);
</script></body></html>
WhJ'0j'?T$62UTQN$%]'?W2A' - =W21!01(3
'? !N%/'!1%`'? TSNundefined
D
):k_ #
@1 +8>,.R2SB1 $8
n6JavaScript62>%W=@+NW2B(?' 'j2 =W20I16J!0\!B`!
'L?!
w26 H924' B!. !G62!1?!
w2B(?6JB\!62'3Q
4!8!9properties!0\!!.$: ]n!<
<!DOCTYPE html><html lang="en"><body><script>
-">?@'EF
A$G
RB3ZfuncA&
-"@,BfuncB-"*2B&funcC&
•?2Q<=+funcA()
119
B\!( F-Q3Function()JavaScript
var funcA = function(){};
•?2Q<=+funcB[0]()
var funcB = [function(){}];
funcC.method()BDfuncC['method']()
var funcC = {method: function(){}};
v[Dn
RB33G
JDBRB<dEF
9G
JD95
var funcD = function(func){
return func;
};
var runFuncPassedToFuncD = funcD(function()
{console.log('Hi');});
runFuncPassedToFuncD();
"*2?RB<EFJDEF
2
"#[•|`(=EFD?*5B
var funcE = function(){};
funcE.answer = 'yup'; // '$=*'%'#[
console.log(funcE.answer); // .*: 'yup'
</script></body></html>
!.62!1?B(?6J'?1!%!F6B\!1' =W2%/W25.?B
'A%!F!?JavaScript
120
B\!( F-Q3Function()JavaScript
IR1C.
r!?ETVN$W2!00(?parametersn!AG-0%!0]!V!F scope'
';n!<?!0%, %/N!0addFunction()!/!1!0=!=$:6
!.!AB?gBM%]!%!.GW!M=?N?W!%?7Q%/BM!]n!<
<!DOCTYPE html><html lang="en"><body><script>
var addFunction = function(number1, number2) {
var sum = number1 + number2;
return sum;
}
console.log(addFunction(3, 3)); // .*: 6
</script></body></html>
ABC.
!!?/B H9:'A!>zFBz0
JavaScript-%/('#MTN%]r!?'?S*
'?N%,'s!/F r!undefined-(F6 =SNf-!:
7S8-(VF'-?Xr!?!? TSNWGY
L\!V$G0!.TN% 'r!?B4%f  M
bG
r!?LG-QW2B(??B6JY92KSB '
B\!(argumentsn6?A `
U!%1I
121
B\!( F-Q3Function()JavaScript
Othis arguments Z,OB.
W!%?U!%this6argumentsn6?5n!A /5
B\!(argumentsGMTN%r!?-%S!3Q?!FE) `B\!1
BB(?%0/!.30'r!S !%n!<? !0/$%S '
'3Q? !?%XargumentsMTN%r!?Gn8' 5?
!.\!%,O!0y2!.G]n!<
<!DOCTYPE html><html lang="en"><body><script>
var add = function() {
return arguments[0] + arguments[1];
};
console.log(add(4, 4)); // .*: 8
</script></body></html>
"AS?'?(!2this%SIB\!(G'5. n6- 5?
-D?%/MW2B(?!8!+!0\!B?g 5?n6%!?6 'thisnQS
*!n!A?'v=N!0!2J R: B\!(G5 global scopeW(%/
'?this'?(!1N%'?B~?>'"&';3V5 *!B\!(1
"AS?thisX!SP%+]n!<
122
B\!( F-Q3Function()JavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myObject1 = {
name: 'myObject1',
myMethod: function(){console.log(this);}
};
myObject1.myMethod(); // .*: 'myObject1'
var myObject2 = function(){console.log(this);};
myObject2(); // .*: Window
</script></body></html>
0Earguments.callee
B\!(L?arguments,!F'8!9calleeB(? !!]I=30N%'GVN%
I30n!AB?g'G!)€'8!+cI1*+%,scope
r< '
arguments.callee'5;n!<?-QS0, !./3$'GV%,2
I=30N%]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = function foo() {
123
B\!( F-Q3Function()JavaScript
console.log(arguments.callee); // .*: foo()
'#$L<$+95callee<+8
'<foo-6
53Brecursively&
// arguments.callee()
}();
</script></body></html>
! 6!'O!%,G|!%S$!0'8!+cI1B !3%,XB(?recursively
0Elength0E arguments.length
B\!(L?arguments'8!+1'8!9length'8!+cI1=W2Bx!?F6J
G=?N?u\!, L%,!.0(''=N?r!? L%,
#%,N%']n!<
<!DOCTYPE html><html lang="en"><body><script>
var myFunction = function(z, s, d) {
return arguments.length;
};
.*s'<Q{+BF
]DdEF
9G
5 SEFI
console.log(myFunction());
124
B\!( F-Q3Function()JavaScript
</script></body></html>
'8!+*+%,lengthB\!(Bp/0?A'F!%Function() !0,
!.!%,'%%r!?(]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myFunction = function(z, s, d, e, r, m, q) {
return myFunction.length;
};
console.log(myFunction()); //.*: 7
</script></body></html>
ABC.
'8!+#S82arguments.length'?.deprecatedBOF
8&JavaScript 1.4u\!, Gn8W!(&!Fn"!B(6
'8!+'G=?N?lengthL-%/?I 'B\!(
'8!+n!?%,u\!, nQScalleenQSF
2 #%,N%'5arguments.callee.length
C..'I1
'3Q?*+%,!F62)!'-9 'r!P !GB(?
125
B\!( F-Q3Function()JavaScript
arguments3VcI1x$ D
[2 ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = false;
var bar = false;
var myFunction = function(foo, bar) {
arguments[0] = true;
bar = true;
console.log(arguments[0], bar); // .*: true true
}
myFunction();
</script></body></html>
-!?P !G#%,Pˆ]XbarEn!?%,!Findex'3Q
arguments-!?G5'? !0,hF)!62
<2(F1b6 <2(!@:)-.)'I1

"AS?'?(*+%,!F!1I30O!0y2 4#6j2n6I30O!>GB(?return
'I30';3V>Y, '?W6F62addB(62-!?'? =SNbG
126
B\!( F-Q3Function()JavaScript
!?]n!<
<!DOCTYPE html><html lang="en"><body><script>
var add = function(x, y) {
6
'9cd"|9 JU(['+d3
if (typeof x !== 'number' || typeof y !== 'number')
{return 'pass in numbers';}
return x + y;
}
console.log(add(3,3)); // .*: 6
console.log(add('2','2')); // .*: 'pass in numbers'
</script></body></html>
"AS?'?(*+%,!F'I30O!>G%/L=$21!.!QG2%(3
return'I30-]B']j2
 6l,. 6l@I 
=,.
'AF'?62'$!F' *+%, [\sKr<F'PB(?
statementAF62 expression;n!<?!.?5[\U)Y, n!<
]
127
B\!( F-Q3Function()JavaScript
<!DOCTYPE html><html lang="en"><body><script>
/*
'<<=m{+B[\J+O';'<L<$+<*
;c?‚2E
G
+BO'_;"9Q]5]
K92
*/
var addConstructor = new Function('x', 'y', 'return x + y');
// '_%'9
function addStatement(x, y) {
return x + y;
}
// ?_%;
var addExpression = function(x, y) {
return x + y;
};
// .*: 4 4 4
console.log(addConstructor(2,2), addStatement (2,2),
addExpression (2,2));
</script></body></html>
128
B\!( F-Q3Function()JavaScript
ABC.
A% ?/6n6P%`'F`'sL!01=W2zn
?/N? named expression'P'sEV'cI16
r< '!?,!
w2B?w%!.$2XGAF
var add = function add(x, y) {return x+y}
% 6l-3%=>% 6lI% (H
 6l@call() apply()
{!?$262[\sFYFn6O!%,B(?
' !'
B\!'
'$!F'
*+%,!Fapply()62call()
;n!<?'F!/O!%,X[\sB
r~%,Y,]n!<
<!DOCTYPE html><html lang="en"><body><script>
'<2Ž<+
var myFunction = function(){return 'foo'};
console.log(myFunction()); // .*: 'foo'
129
B\!( F-Q3Function()JavaScript
2?@'<2Ž<+
var myObject = {myFunction: function(){return 'bar';}}
console.log(myObject.myFunction()); // .*: 'bar'
'%'<2Ž<+
var Cody = function(){
this.living = true;
this.age = 33;
this.gender = 'male';
this.getGender = function() {return this.gender;};
}
// :';'<<+
var cody = new Cody();
console.log(cody); // RB3B"#[de
L<$+apply()Bcall()
var greet = {
runGreet: function(){
console.log(this.name,arguments[0],arguments[1]);
}
}
var cody = {name:'cody'};
var lisa = {name:'lisa'};
130
B\!( F-Q3Function()JavaScript
'<<+runGreet[3D92cody
greet.runGreet.call(cody,'foo','bar'); // .*: cody
'<<+runGreet[3D92lisa
greet.runGreet.apply(lisa, ['foo','bar']); // .*: lisa
/*
%•l78call()Bapply()Q"|9R+d'2?@
Q<=G
?'<
*/
</script></body></html>
%3V=W:O!%,X[\sB'F:d$:?5vj%W2}]
!.0C2%SW2B(?-%/?!.-!%
!, 
'.A?'anonymous functionvTN!.N%'1 identifier
H924' G-!?' ?%W!]:'!f'.A?n6*M+%/N]n!<
<!DOCTYPE html><html lang="en"><body><script>
// <+8')5M<m8O'_'3
// function(){console.log('hi');};
131
B\!( F-Q3Function()JavaScript
'_'3<+`(='3
var sayHi = function(f){
f(); // '_9'<<+
}
// 92'_'359
sayHi(function(){console.log('hi');}); // .*: 'hi'
</script></body></html>
!8<@=8==,.=>>P #
 
D
'5.
'$!'BY M
V0N?L!' 'j22 AF4'=?n6B(?
Function()o:-!*+%,!F!.3F)!%/NW2&-‚ D
V0N0,
';n!<?sayWord()c$!I16 )!!.%/0,yAF4'=N?
!./3$%/%n6!F self-invoking function ]n!<
<!DOCTYPE html><html lang="en"><body><script>
// .*: 'Word 2 yo mo!'
var sayWord = function() {console.log('Word 2 yo mo!');}();
132
B\!( F-Q3Function()JavaScript
</script></body></html>

D
'5.!8<@=8=!, 
?/16 )!!./3$%/'.A' -T<?N'AF!O!V$GB(??B
!./3$%/%'.A?n6 self-invoking anonymous functionn!<?LY,
n!()2T;
)!!./3$%/'.An6]n!<
<!DOCTYPE html><html lang="en"><body><script>
_;9%6
<$+R‚IT2D
(function(msg) {
console.log(msg);
})('Hi');
a>N]3‡5O6
|c4$
(function(msg) {
console.log(msg)
}('Hi'));
,$‚T2D
!function sayHi(msg) {console.log(msg);}('Hi');
// %'_9'<<+958•p9
'S385 Immediately-invoked function expression!?B4@?!(6
133
B\!( F-Q3Function()JavaScript
// function sayHi() {console.log('hi');}();
</script></body></html>
ABC.
!?!6ECMAScriptG'nTSO)262 'n]o:
expression
)!'%/N%,#$!bG`'F 
 + [
?-
';n!<?PTfY, 6]2W6 !.wF-9 !.36n6jVB(?
goo'-9 bar'-9 foo]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = function() {
var bar = function() {
var goo = function() {
?=Q'mdewindow
console.log(this);
}();
}();
}();
</script></body></html>
134
B\!( F-Q3Function()JavaScript
W6 !.wF-9 !.36n6VB(?E=$216'/F!01!.!QG2%(3
V% [?   56
ABC.
'?=W2IthisB\!(
r< /\B\!(1'V%?n6
window8G !S3Q% JavaScript 1.5 EMCA-262 v3
 -. 'I1  R1 
'=W2!F!,!$b!?JavaScriptB4d$ƒ2'G=?NW2B(?6'?-T<?N
62u\!,H92
X6 -%n66 H92' G' ?B(?!%!F6r!?
!$!]2?/!1Nhigher-order functions
'G'.A' ;n!<?TNY,foo'B)!!1N$v,%6
foo>%?VN,I.F6bar'=W:'.A?'Gfoo'.A?'-%/
r!!?.[,!.33VBj? )!!16 ]n!<
<!DOCTYPE html><html lang="en"><body><script>
// v[IRB<3G
BDRB<dEF
9G
JD95
var foo = function(f) {
return f;
}
var bar = foo(function() {console.log('Hi');});
135
B\!( F-Q3Function()JavaScript
bar(); // .*: 'Hi'
</script></body></html>
'%/N!0bar'G!1!$%'.A?'%/%/foo()B6
'B'.A?' !N%,yfoo()>%?GM0/N%,6barP7 T
gn!<?I16
B!1>n6?B(?
!<:) (H
:=W2H!?F !.3-I30%O!0y2%/N=W2AF'=N'B(?
AI!.3W2-:62E03%/(LbW2AB(OVzF `f
';n!<? N
#%, Lb-33)E5!0sayYo()6sum()-
!.3]n!<
<!DOCTYPE html><html lang="en"><body><script>
// RBIRT9
var speak = function() {
'<WEF
G
 sayYo()Ž<+95O<%
•.*yo
sayYo();
136
B\!( F-Q3Function()JavaScript
function sayYo() {console.log('Yo');}
}(); // 6
‚;'<<+
// ?TRT9
'<WEF
G
 sum()Ž<+95O<%
console.log(sum(2, 2)); // .*: 4
function sum(x, y) {return x + y;}
</script></body></html>
I30%o( Gv!wN6n6O!V$G!? =
/3N
execution stackI=30NW2-
n6O!V$G!?%L+%,0!%XBFLbwW2L 3V
ABC.
'AF'=N?n6function expressionsB(?X
'AF!?%F'=N?n6O!%,B(?!.3-!1‡!%,
function statementsu!.3-
bI <2 !8<@=8O6-
'>U?/?BJavaScriptBu?0cI1=W2'S6 !./3$'%/W2
';n!<?‚ D
V0N0, '\!V'A{!?$2countDownForm!./3$%/%
O!%,Xo( !
w2?/N call stackI30%n6B!WT@+No(16
!(6'S385Call stack!?B4@?
137
B\!( F-Q3Function()JavaScript
',countDownFormB(']'cI1‚ D
V0N,!,2-(VF0Gs
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var countDownFrom = function countDownFrom(num) {
console.log(num);
num--; // 9'9c>
J2qnum < 0
6
‚;'< =@
if (num < 0){return false;}
<+6h5D*i%J2arguments.callee(num)
6
'_'<b2q
countDownFrom(num);
};
LcdIX
yG
+?BO'<<+0‰Œ‰•‰‘‰r‰s<7Q
countDownFrom(5);
</script></body></html>
' 6!'=W22 !./3$'%/W2\!VfBa recursive
138
m.E:;<
J=83-3
5
*!/\B\!( a!+-Q3JavaScript
=83-3J!<.-A@
3)H%SW2AJavaScript3)O!V$G0n!<?-, B\!B?g!./3$
JavaScriptH%S%/73Q%'ZJavaScriptB\!B?gI=30N6windowB\!(M%N
window /\`B\! E=$2 head object*!B\!(!F !$!]2EG!VN62
the global objectp/$?5JavaScript]6/\B\!*+%,%
-DB/\B\!(‚=.NJavaScript!.%(%3VP>%a(P9
'0=?wNY%3V'!w%,X6*+%/?JavaScriptwJavaScript%3V
73Q%?F[%!?LbB[S%0 I=30N(/\B\!(B?g*+%/?!.%(
zF'!%3V‚ D
V$NY,JavaScriptB\!(` 5=W2B[S%0,6
/\window]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myStringVar = 'myString';
var myFunctionVar = function() {};
myString = 'myString';
myFunction = function() {};
console.log('myStringVar' in window); // .*: true
console.log('myFunctionVar' in window); // .*: true
console.log('myString' in window); // .*: true
console.log('myFunction' in window); // .*: true
140
*!/\B\!( a!+-Q3JavaScript
</script></body></html>
3)%(!0E=$2!6 E%0W2AJavaScriptB\!(!sGB?gM%(N%/
1 /\B\!( 7Q=W2vL=$2-Q3I1H%S'F~%Y, /\
*!B\!( 7Q?v 
ABC.
n!A21/\B\!(n!Ascope'ZF%JavaScript
=83-3-e'I. 
YJavaScript
X6 %N';',!,:n6 !/'=?n6zF'j?S
73Q%';'*+%,!00(?
r< /\B\!('F!
window.parseInt('500')/\B\!('F! n6 !.=$2n6cI1%W2L0(?
'>!16*+%,r)!`@1!5JavaScript
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent()
eval()
isFinite()
isNaN()
141
*!/\B\!( a!+-Q3JavaScript
parseFloat()
parseInt()
.F 0E =83-3
'!>%?62'!!8!+*.3/\B\!(*.3BFu+X
*!n!A? 5?global scope?5%SIB\!(1/\B\!(
G!)€*M+%/N '!>%? 62 '!!8!+ 7Q!2 !0\!(
MM%N H9:!0\!(]2n!A?'F!W(X%6/\B\!(B?g)! 5?
X!A?']!$B 3VI30W!(Bx0z>F3V?5W:'!L

X86L?scope chain'!>%?6!8!+L%
'8!+;n!<?gY,fooB'8!+LG-8Y,y*!n!A?
9^4n!A]n!<
<!DOCTYPE html><html lang="en"><body><script>
Jfoo-?='#[BL>window&
var foo = 'bar';
6
<5<m6
8_VX
*G
RB<EFJDEF
2
var myApp = function() {
var run = function() {
.*bar>9'9cBOfooX
TG
?
?=?@
142
*!/\B\!( a!+-Q3JavaScript
console.log(foo);
}();
}
myApp();
</script></body></html>
'8!+ N
#g6bG!2foo'B(?%B*!n!A?|!9console.logB
'?<fooN%,6undefined;n!<?7 =
g1!I16
<!DOCTYPE html><html lang="en"><body><script>
Jfoo'<R_?@
3m>myFunction()
var myFunction = function() {var foo = 'bar'};
6
<5<m6
8_VX
*G
RB<EFJDEF
2
var myApp = function() {
var run = function() {
console.log(foo);
}();
}
myApp();
</script></body></html>
143
*!/\B\!( a!+-Q3JavaScript
r< '!n6O!%,'$!(GO6/1I16 window.alert()'ZF
j:!
]!%W(,*!n!A?O)-=W21E?.3W2L! n!A2B73Q%?
'!!F >%?6!8!+L'?/,1I16n!A
ABC.
*+%,BF`-Zg `
•L!01var*+%,*6var*!n!A?
I1x$ D
[2 '!>% 62 '!!8!9 !0„%0,
n_/StackOverflow-8!3%B@?
=83-3R1'/5M
,XG's!/F!)&1'sn62 /\B\!(G!)€W!%s !L!01
r< /\B\!(? window'?(*+%,1'$!<' 73Q%
"AS?this;n!<?B%r-?%,Y, *!n!A? ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = 'bar';
windowRef1 = window;
windowRef2 = this;
-d‚dereferenceQ&window
console.log(windowRef1, windowRef2);
144
*!/\B\!( a!+-Q3JavaScript
// .*: 'bar', 'bar'
console.log(windowRef1.foo, windowRef2.foo);
</script></body></html>
Gn8!?1!0+%,yB>%/\B\!(G!)G[F!/n!<?!$T@9
*!>%?foo
4e D
'I*1/? #
^ D2e=83-3JVE8 #
W%n!<?-, !0?gEG!V,E=$:UgF/\B\!(G !!VNX
W!Awindow.alert()6alert()-D?(Nt]J73Q%?'ZFWry!?%JavaScript
B\!(=W:6 !1 3?F!f3window 56B[S%%B\!9^1 /\B\!(2
n!A?'/, E 62 !8!+ scope chain/\B\!(G!VN/
';n!<?-?%/0, !6 !0?galert()*!n!A? 5?n!<]
<!<!DOCTYPE html><html lang="en"><body><script>
window-*6
*9SdG
window.foo&
var foo = {
fooMethod: function() {
window-*6
*9SdG
window.alert&
alert('foo' + 'bar');
window!UNSB*’%SdG

145
*!/\B\!( a!+-Q3JavaScript
window.alert('foo' + 'bar');
}
}
window*6
*9SdG

window.foo.fooMethod()
foo.fooMethod();
</script></body></html>
=W:I16LIFUTQN%]!?\ !0?gEG`!V/\B\!(=W2.3W2.?B
n!A?'/,B\!9^1/\B\!(scope chain
ABC.
2 UgF/\B\!(qSwindow.alert()B
XF
alert()B?
r 3VI30',H O :-G _,
n!A?'/,?%W2d,:scope chain!)&B
XF!1 3?F
` 5c!=W2v M
#06%]/\B\!(GUgF
*!n!A?
146
GI8:;<
'n,this
6
"AS?'?( o !/-Q3thisJavaScript
JEH-A@this23R1? #
% 
!.?, a(O6 `"AS`'?Y M
V0N%/!`' Y M
V0N!0 thisGVN%
>%?H924!F 'E-?IB\!(thisGVNE=$2XG'n!A `
U!%
E!8!9H]G'LW(IB\!(
B\!(Gx00codyBn6:-Q3H92]n!<
<!DOCTYPE html><html lang="en"><body><script>
var cody = {
living : true,
age : 23,
gender : 'male',
getGender : function() {return cody.gender;}
};
console.log(cody.getGender()); // .*: 'male'
</script></body></html>
'8!+G!086'3ˆ]Xgender'-9 getGenderu0's
r< cody.genderB\!(*+%,!Fcody*+%,!F[,!'F!%B(? E/3$this
B\!(G!)€cody =W:thisB\!(GVNcody]n!<
148
"AS?'?( o !/-Q3thisJavaScript
<!DOCTYPE html><html lang="en"><body><script>
var cody = {
living : true,
age : 23,
gender : 'male',
getGender : function() {return this.gender;}
};
console.log(cody.getGender()); // .*: 'male'
</script></body></html>
"AS?'?(this!1!0?%,%this.genderB\!(G's!/FVNcody
'EE?I
U)=W2zH!?Fthis!?E=$2=I LbB[XB(S<6LF
"AS?'?(*M+%/NthisB
XF'%SIB\!(G!)€n6-9 
"AS?'?(*+%,B?w%O!0<%,X !./3$'new62call()62apply()
ABC.
"AS?'?(thisXL=$2XG>%?'jFq,L/66
!.%/
Bz0arguments'G- M
,N%r!?6this
'8!9#/6"AS'?
149
"AS?'?( o !/-Q3thisJavaScript
)IP #
%this"
'?this#6'E%/I•!/?%n6?5G=?N?
!1ƒIL%b!VX!SzFL!01=W:!015E%$ I30%
B\!(N2myObject,!F'8!9';3VsayFoo'GVN%6
sayFoo'%/N!0sayFoo*!n!A?Bglobal scope'?(VN%/
"AS?thisB\!(GwindowB\!('F!'%/N!0!2myObject
V%/thisGmyObject
,!F'8!9 56fooB\!(myObjectB
XF '8!+L'?-M?%/N%/
'?foo *!n!A? ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = 'foo';
var myObject = {foo: 'I am myObject.foo'};
var sayFoo = function() {
console.log(this['foo']);
};
(myObject +%'#[sayFoo
'3QmBsayFoo
150
"AS?'?( o !/-Q3thisJavaScript
myObject.sayFoo = sayFoo;
myObject.sayFoo(); // .*: 'I am myObject.foo'
sayFoo(); // .*: 'foo'
</script></body></html>
'?=W27gBthis
=W2 `7S8 'O!%,•!,?%
myObject.sayFoo6sayFoo•!,2 W!( !?%B(J'a3$GWVN
'O!%,sayFoo()'?W(%/this'3%+
2 /\B\!(*+%,B7Q%B('F!/3Va3$cI1window
]n!<
<!DOCTYPE html><html lang="en"><body><script>
window.foo = 'foo';
window.myObject = {foo: 'I am myObject.foo'};
window.sayFoo = function() {
console.log(this.foo);
};
window.myObject.sayFoo = window.sayFoo;
151
"AS?'?( o !/-Q3thisJavaScript
window.myObject.sayFoo();
window.sayFoo();
</script></body></html>
'?=W2'0j' G'5B<:Lr%62n6L+%,O!0y2W2L
this'L\!%,•!, !?%j>%%,
ABC.
!?5this6argumentsa6'PW!(?%
?/NI16 !.\!%,W!(lexical scope
'n,this =>=83-3R1? #

?
"AS?'?(KS,I!nO!/%!?Fthis 5' -9 -M?%/N!0
'Z/!9: H92' B?gECMA v3=W21thisB\!(GVN6!.sƒ-wM
B\!( /\windowE9 '#MTNIB\!(B
XF !S3Q%?
"AS?'?(ƒ-D
wM%,;n!<?3this-9  5?func26func3!.s
B\!(GVNB6myObject/\B\!(GVN%,!?$G6]n!<
<!DOCTYPE html><html lang="en"><body><script>
152
"AS?'?( o !/-Q3thisJavaScript
var myObject = {
func1: function() {
console.log(this); // .*: myObject
var func2 = function() {
.*window
+Bthis6
<,@JzS
console.log(this);
var func3 = function() {
.*window
?=SEFI
console.log(this);
}();
}();
}
}
myObject.func1();
</script></body></html>
#=N
]'(V?cI1=W21A!9:ECMAScript 5cI.E%0W2LB(
!.wFGn6?%F2!0! 8Q9'!()&
'G'.A' T?N!0KS,b!x$6';3VGx$
foo.func1'-9 '.A?'%/N!0foo.func1' -9 ' 2
153
"AS?'?( o !/-Q3thisJavaScript
V%/this/\B\!(G'.A?'-9 ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = {
func1:function(bar) {
.*windowNBOfoo
bar();
+thisQ*foo
console.log(this);
}
}
foo.func1(function(){console.log(this)});
</script></body></html>
'?=W2!6 I%W2Lthis'#$!WG/\B\!(G!6 VN%,
'F!/'!()&=W2T26 H924' •!,!%/62H924' '3>!. 5?
#=N
]ECMAScript v5
,8H? ?.Rg<^
'?!0/]thisn!A?'/,P…'s!/FL0(?6!!?wBscope chain
G!)GO!F&this*+%,Lb-'s';3V7 T
g%, R:'
154
"AS?'?( o !/-Q3thisJavaScript
,!F>%that]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {
myProperty: 'I can see the light',
myMethod : function(){
Qd‚5A$this]D-myObject&
'<R_?@myMethod
var that = this;
';'3
var helperFunction = function() {
.*I can see the light
EFJIthat = this
console.log(that.myProperty);
2.*window~L<$= JOthatg}
console.log(this);
}();
}
}
myObject.myMethod(); // '<<+
</script></body></html>
155
"AS?'?( o !/-Q3thisJavaScript
)=>thisJEHcall() 6apply()
'? =SNthis"AS?'?(*+%,0O!0<%,!F 'O!%,•!,B !
new'?F(S%L0(?B( [\! FLbY0,6this*+%,!Fapply()62
call()"AS?'?(VNIB\!(1!S%this'O!%,0EG
'Dd%, !0-y!?[\cI1*+%, XB\!(-?%/W2'92B(Z'?
"AS?'?(thisTSN%'g%X'"6!A%0,LI!03F6JavaScript!.
"AS?'?('?this
'%/0,y' 6!0\!;n!<?‚ D
V0N0,call()'?-A$(
thisB\!(GV'-9myObject'-9 'A!?%m?%,y
myFunctionB\!(myObjectB\!(G!8!+L !0,GB
XF'0j 4!8!+F
EGVNIB\!(!0=W($I.F6 /\this'-9 myFunction n!<
]
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {};
var myFunction = function(param1, param2) {
thisQmyObject;'<b<+G
qcall()
this.foo = param1;
this.bar = param2;
// .*: Object {foo = 'foo', bar = 'bar'}
156
"AS?'?( o !/-Q3thisJavaScript
console.log(this);
};
'9c{;BO'<<+thisQmyObject
myFunction.call(myObject, 'foo', 'bar');
// .*: Object {foo = 'foo', bar = 'bar'}
console.log(myObject);
</script></body></html>
[F!/n!<?!0?%,call()O*+%,B(?B(apply()1!?.0F•3 !
w2
*+%,0'8!3F'Q3r!?=?N%,bG 'Gr!??'3
call()*+%,0!2Japply()a30F;n!<? '3Q-9 r!?=?N%/
-?%/E=$2XG[F!/n!<?(apply()]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = {};
var myFunction = function(param1, param2) {
thisQmyObject;'<b<+G
qapply()
this.foo = param1;
this.bar = param2;
// .*: Object {foo = 'foo', bar = 'bar'}
157
"AS?'?( o !/-Q3thisJavaScript
console.log(this);
};
'9c{;BO'<<+thisQmyObject
myFunction.apply(myObject, ['foo', 'bar']);
// .*: Object {foo = 'foo', bar = 'bar'}
console.log(myObject);
</script></body></html>
TSN%'g%X'"6!A%W2%/L=$21!01!.?.3W2L%(3
!.JavaScript'?this'n!Afunction scope
'n,JEHthis: L
)-.>P #
.@I:XI
JE8
"AS?'?(*+%,!F' %/N!0new'?this'$!'-9
-!%$W2!00(?'$!' H924!F Y M
V0N%,%B\!('+/$GVN !./3$
*+%,!FB\!(this"AS?'?('g%X'?>%%,'!SL6 E\!V$G-
this*+%,!F'?>BP%+X'Fcall()62apply()
'$!';n!<?‚ D
V0N0,Person*+%/%this%B\!G!)€
'$!'B`'+/$Y M
V0N!0 c‡!V$GPersonV%/this.nameAB\!(G
!.?,'8!9!.w6‚ D
V$N2Inameu,B4b9Y4'?Fname'G=?N?
158
"AS?'?( o !/-Q3thisJavaScript
'$!]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function(name) {
thisU
E
*G
+]<5<_Q+
this.name = name || 'john doe';
}
';'<Q6
39<5<m2Person
var cody = new Person('Cody Lindley');
console.log(cody.name); // .*: 'Cody Lindley'
</script></body></html>
=W2H92T2this'$!'%/!0 Y M
V0N,IB\!( GVN
"AS?'?(*+%,!Fnew"AS?'?(*+%/$!2newI9Y%/this!.%?
'!.#MTNI•!/BPersonn!<Gx00 '!ScI1/\B\!(16
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function(name) {
this.name = name || 'john doe';
159
"AS?'?( o !/-Q3thisJavaScript
}
^_9'99= *Dl78new
var cody = Person('Cody Lindley');
-'@w'9)Zundefined
6
U([f;=+B&
?@3m''9)window.name
// console.log(cody.name);
console.log(window.name); // .*: 'Cody Lindley'
</script></body></html>
'n,this-3=>I:XIprototype? #H
@-.]?2 #
-3R1
-?%/$!0this'8!+G'!wN?n6prototypeVN%/'$!'
,!F'QQ+'$!F' !0 =W2-0 '$!'B‚ D
V$N2IB\!(B'+/0G
Person()-!(,XGn8!$ 2n!]6 u,-!(e+V,%6
'Pw0/e+VqIwhatIsMyFullName'8!+GPerson.prototypeI
d0B!0\!(?5K%,Person"AS?'?(!0+%,06 'cI1this
!.!8!9!%!F6 YV0N?B\!('+/$G-QW2'B(?'
d0BB0\!O!V$G'?U)Y,Personcody6lisa'!y,WI6
160
"AS?'?( o !/-Q3thisJavaScript
whatIsMyFullName"AS?'?(%S%thisB\!('+/$Gn8
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function(x){
if(x){this.fullName = x};
};
Person.prototype.whatIsMyFullName = function(){
thisU*G
9'$=QG
+
';'<Person()
return this.fullName;
}
var cody = new Person('cody lindley');
var lisa = new Person('lisa lindley');
'!Bd9'<<+whatIsMyFullName
L<$=?this'$=Qd‚“
console.log(cody.whatIsMyFullName(),lisa.whatIsMyFullName());
/*
'=+RAprototype"*<7Dp95 JO6
'F
@
'#$fullName'=+?@*ƒ; =@OprototypeK
'#$Z3D4hG*+fullNameQprototypeyK
161
"AS?'?( o !/-Q3thisJavaScript
K+I?@'y7|9
*/
Object.prototype.fullName = 'John Doe';
{+B]DdEF
9G
5 
'#$WhG
fullName'$='F
5DQ
var john = new Person();
console.log(john.whatIsMyFullName()); // .*: 'John Doe'
</script></body></html>
"AS?'?(!0+%,!0=$21!01!1!.F!%,L%(3thisG!)€
B\!( 5' -9 !1!0g6!0!0\!(p/$prototypeB\!(L?WG6
'/,!.0tS%/!'8!9prototype
ABC.
EG!VN?B\!(%SbGthis[=N%/'0jN'8!9
'/,tSprototype'8!+B(WG!0!<I !./3$
fullName!.0tS%/B\!('+/$ 5
Person.prototype.fullNamey
Object.prototype.fullName
162
Z8:;<
=>^,JavaScript
7
X!A? F!/-Q3JavaScriptJavaScript
=>^,-A@JavaScript
n!A?JavaScriptX!A?Bd$2'yryL!0163VEI=30NI•!/1
*!n!A?global scopeS?n!A?6 local scope'n!A?F!$!]2EG!VN6
function scopen!A6eval
*+%,!F'=N?3VW(var16S?n!A?B?g` 54' M-9
B?g 5?3VLb!?Fu'L'A%'FG '\
2B!.Gn8B(?*!n!A?'=N?>%?!2 !.9 'V%n6 'j2
n!A?'/,'$2!.$:W!(scope chain
>%?B7Q-=W2.3W2BY6Bj?%F';3Ve j
S3fooE
'BP%+E!A=W:E%8Q9]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = 0; // LR_9
console.log(foo); // .*s
var myFunction = function() {
var foo = 1; // ?9R_9
console.log(foo); // .*r
164
X!A? F!/-Q3JavaScriptJavaScript
var myNestedFunction = function() {
var foo = 2; // ?9R_9
console.log(foo); // .*
}();
}();
'<R_eval()
eval('var foo = 3; console.log(foo);');
</script></body></html>
,!F>%-=W2.3W26wBfoo.0]6-=W:'3%+'?%S
4-Q30 4P%+ 4n!A `
v=N
ABC.
'6n6X!A?BEQ]X O!V$GB(?evalL!01!?0F
'ZFB`*+%/N]6*!n!AJavaScript
n!A?'/, 'S 9^1*!n!A?
',=(N4I30 N
X!An6B?g 5?n6‚ D
V0N stacked
execution scopes!.=$2!.wF'?o !(?G !!VN6
n!A?'/,scope chain
=>%^,.^JavaScript
-< '0?F!%=W:`'% `
X!A5Xif-< (%!]6 forD
V0NX
165
X!A? F!/-Q3JavaScriptJavaScript
!%
X!Ablock scopex0B2 >%?•'F!%( !NW2B(?I!.F! 8!9
>%?'?P !N,b!?.3L=$2=Y6';3Vfoo3VI30O!0y2n!<
]
<!DOCTYPE html><html lang="en"><body><script>
var foo = 1; // foo = 1
if (true) {
foo = 2; // foo = 2
for(var i = 3; i <= 5; i++) {
foo = i; // foo = 3,4,5
console.log(foo); // .*: 3,4,5
}
}
</script></body></html>
'?>%bGfoo=W:3VI30O!0y2JavaScriptL!01!?$G6!%
X!AL?X
'`F!`n!A6 '`F! S`n!A6`*!`n!A eval
JEHvarbI< F-Y; :XI
^,-JI;
vTN%,JavaScript!./X>%'j2varB'/,62'  5?L%]
166
X!A? F!/-Q3JavaScriptJavaScript
E=$2ˆ]X6';3VGx$ D
[2 S?n!A?B
XF*!n!A?!.$2 n6
*+%,W6 var>%?B7Q%barn!A?a6*!n!A?v=N%,'?Wh
g%X!.3W!( S? ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = function() {
var boo = function() {
9= var
bar?@LR_9?@`+window.bar
bar = 2;
}();
}();
.*>9JIObarLR_9?@
3m
console.log(bar);
€”)*QpqB
var foo = function() {
var boo = function() {
var doo = 2;
}();
}();
167
X!A? F!/-Q3JavaScriptJavaScript
.*undefinedEFJIOdoo'<R_?@booU([•<+BO
// console.log(doo);
</script></body></html>
*+%,LE=$21!01(3varI16n6-9 >%?P0!?\ 
!01!cI. `O!0<%,L!01 X!A?%'(DFN6jSN-!V-!%LNT0A,
?' -9 B*!n!A?!8!+nTN62‚ D
V0NW2
,8H
tS!0KS%tS!?B`'/,L!01JavaScript4'4'?B
n!A?'(1'0'//cI1 >%?F hierarchy of scope';3V3
'?~Y,sayHiText'n!A-9 Bfunc2]n!<
<!DOCTYPE html><html lang="en"><body><script>
var sayHiText = 'howdy';
var func1 = function() {
var func2 = function() {
R_?@func2
QdT +sayHiTextLR_9?@
console.log(sayHiText);
}();
168
X!A? F!/-Q3JavaScriptJavaScript
}();
</script></body></html>
'?<B(?PsayHiText'n!A 5B(WGfunc2l
tS%,JavaScript'
X62func2?/?>%?BsayHiTextE<B6
R: 'tS%,yB6L!01 parent function!?/?func1<B6
>%?sayHiText'n!Afunc1-?(%,I!
w2JavaScriptG-Q%!.<SF
<%,t]*!n!A?sayHiText>%?'?-QS%,!106sayHiTextJ
>%?B(WG6sayHiText'? !G%/*!n!A?!undefinedB
-DJavaScript
Kry!.~0,%H9243)Gx00J*.3?I1%/W25.?B
'3%+X!A'yryB]n!<
<!DOCTYPE html><html lang="en"><body><script>
var x = 10;
var foo = function() {
var y = 20;
var bar = function() {
var z = 30;
>9zJ>9BO?yBxE
TG
+
R_9'=+?@9
169
X!A? F!/-Q3JavaScriptJavaScript
console.log(z + y + x);
}();
};
foo(); // .*: 60
</script></body></html>
>%?'?z''S`'?1bar'O!%,n!Aa3$16
console.log'?!2y'n!A.foo' R: '1% bar()
'?6x'-9 Bn8`']!%>%?L?56 *!n!A? 5bar
'I?>%?=W2.3W26wB n!A?'/,bartS%,
!.?nQSn!A?'/,!.0
ABC.
n!A?'/,=W2A%/!: M
(WGscope chainP%+X
'/,B<prototypeprototype chain4'sB`!!?1r6
!(16!?x0 =SNB!24'?BtS
! V_ #
) 6,8H#H
E?,';3V>%L!01x'EI=30N%,In!A?a3$` 5
console.log>%? 'S? '?-M?%/N%,6 xS?'?=W2%z6
2 ,Xa3$!.%>%?!!0w62>623+%,xn!A?'/,
170
X!A? F!/-Q3JavaScriptJavaScript
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var x = false;
var foo = function() {
var x = false;
bar = function() {
var x = true;
/*
?9>9xO'==?@SE
TG
+>RBD
n
R_?@ +8N9?">9ZwQ?(>G
+
[\
*/
console.log(x);
}();
}
foo(); // .*: true
</script></body></html>
!.M<N'$R20P%,n!A?'/,>%?4'?BtS =W2I
'//F2 4!S,Xa30F`>%MD
56%]>%?'?
171
X!A? F!/-Q3JavaScriptJavaScript
!3H2m (2o6,IP#H
Gn6?E/3$#B(?6n6 =SN'jS `
X!AL!01#$!!j?
B!1>!.wFJavaScriptcI1n!A?'/,3VL=W2!0wFBx!?F
'W!(O!0Fn!A?'/, =SN 5`-.,E0(5``21'!S
!
w2I1?/6 !.\!%,0a6!.3O!0y2 lexical scoping
=W::I.F!T( 
3)<EFW6<%}!+):'f2JavaScript
'>F! O!V$G!00(?Lb/F6J'O!%,-n!A?'/,Y M
V0N%,
closures*!n!A?G!.'V%N' N' O!V$G!00(?n!<?-,
R:'n!AG n!A?'/, n8B'V%?'B(?%%,!%!F6
';n!<?vTN0,parentFunctionyB6'.A' N%
-9  56'=N'.A?'=W:6 *!n!A? !N?'%/0,
parentFunctionn!AG
X86L?#"!?parentFunctionI16!.\!%,0
'>?'AF!%!F E?/$! closures ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var parentFunction = function() {
var foo = 'foo';
'_'33
return function() {
console.log(foo); // .*: 'foo'
172
X!A? F!/-Q3JavaScriptJavaScript
}
}
>9nastedFunction'<QG
5
3G
9';9parentFunction
var nestedFunction = parentFunction();
.*foo3G
9'<JIO
QR#9+fooR_9'=+;
nestedFunction();
</script></body></html>
!!?3V#MD%N!?2 P%O!0y2 =SNn!A?'/,=W2!01.3W2L
n!A?'/,!Z)j>NBLF'8!+3V-9 !.wFGn6?6
,8H!HF
=
/%B6-Q3I1!.tS'36n!A?'/,BEM%?!-L01IFg
'>?F!%.Lclosures,!F' ;n!<?‚ D
V$NY,countUpFromZero
n!AG
X86L?%/'V%?'%/N!0!.0?g 5' NN'cI16
n!A?'/,/FR:']n!<
<!DOCTYPE html><html lang="en"><body><script>
173
X!A? F!/-Q3JavaScriptJavaScript
var countUpFromZero = function() {
var count = 0;
<+<*';9'<<G
countUpFromZero
return function() {
>9count•I'<?@WEF
G

return ++count;
};
}(); // ';9'<3G
+BO6
‚;Q<=G
+
console.log(countUpFromZero()); // .*: 1
console.log(countUpFromZero()); // .*: 2
console.log(countUpFromZero()); // .*: 3
</script></body></html>
'!.%/N-countUpFromZero 5?'.A?'L?%/
' B !N?6  countUpFromZero%'0%cI16 R:'n!AG
X86
[> 4
AF4B`n!<1n!A?'/,-?'s?%closure
174
X!A? F!/-Q3JavaScriptJavaScript
ABC.
Lb `Q#$Y*"rB<2'>?F!%u T
/F20$2 M
#//]2WG
7SQ.3p,1.?=W2%20$:QBI1 N
#00(
•!,Y'6gfn9a6X!A?6n6
x0!FLSQ$Y'>?F!%B 4
Q34U)G M
#A%]WG I30%
'!GJavaScript Closures
175
-._:;<
0Xprototype 
8
'8!9 B!<-Q3prototypen6'F!%JavaScript
8H-A@prototype
'8!+prototypeB`YV0N`B\!1JavaScriptB\!(B4'+/$-(Function()
"AS?'?(*+%,!FY M
V0N?!0\!(p/$BFuF!.$h'!0%>FbG6newG
n6 'y662 '!V?F!0\!(U!?/1Lb-O6/6 !.YV$2%'$!'
D'?BtSO!0y2KS'!V?=W2:!126 .0F'%V?'\!V!8!+6
B=I !4'8!9n6:-Q3'8!9G!.n8n6!S62tS-E=$2
'/,tS-?(%/!.M<NWhB\!(!8!9!.0tS%/B\!
prototype
ABC.
B\!(Y M
V0Nprototypeprototype object
M
#0bG!j?x0z>F' -(
X*2'$!F''*+%,
'$!'B'3Q;n!<?‚ D
V$NY,Array()'%,Y,yjoin()
n!<]
<!DOCTYPE html><html lang="en"><body><script>
var myArray = new Array('foo', 'bar');
console.log(myArray.join()); // .*: 'foo,bar'
</script></body></html>
177
'8!9 B!<-Q3prototypen6'F!%JavaScript
'join()B\!('+/$'8!+'=NfmyArrayn8B!00(?!00(
!4W!(?F'=N'cI1=W2_?B B\!(qI'F!6'=N#$!!?!4'F!.G
'8!+'F!'8!+'=N1!0/]lB2B(prototype'$!'Array()W:6
'>JavaScript'Ajoin()B\!(B?gmyArraytS%/JavaScript'/,
prototype,!F4' Bjoin()
 !G'F!6O!3(1S/l'cI.FLI!0O6/!!0/]
'$!'Bc‡!V$G'3Q-T<?NB\!-Ab!? *+%,XArray()W2
' vTNjoin()'=W2B]EF'8!9join()L?5-y!?%-(VF-?%,
' a30F!3Q??5q!V%W20?Bl!0\!(join()O!V$GG'5!SW6 
'3Q-T<?NB\!-('B'+/$
'8!9-w3F!.0!0yS%O!3([SB!00(?prototypeuF6prototype2
prototype linkage'/,tS6prototype'y!8Q9-Q3I1UV0,6
B\!(Bprototype'^I%F2W2L-w:BB( !.3YXMBD?!! !T/N%
'/,-?prototypeG5n6:-Q3S'3BIG M
#A%]bG
!8!+
0E!@O62&prototype"
'8!+F%.$W2!0prototypeR!,2'F:
178
'8!9 B!<-Q3prototypen6'F!%JavaScript
.()*
'8!9=W21,n62prototypeo!,2 5?'$!n6-DB'?%/N
r< '> Object()6Array()6Function()LBYV0N?!0\!(U!?/ pG 
!.+%/%';16
X6 6 4!8!9KW2'$!n6JavaScriptU!?/!./3$
'8!9Bn66!8!+KWYF!0\!(prototype.3W2 M
 2bG '$!'
JavaScript-?%/P.3W2L!!!?.JavaScriptB\!(prototype
.+,)*
%'y!,2-?%/W2L0(?LDB'=N?'$!n6L\!V$G0
'>',!,:!0\!(!.?%/JavaScriptB !3%,X'3.3W2
X62LB(
'8!+prototype
.-)*
B\!(B'ySX!?FprototypeB(!0\!('y6B9^! 
?$- T
w3N62
'y*+%/I9^ `„!.%3)62nTNW2*!:]2w!6
B\!(prototype'y-?'ŒF!
SW(W2LLbKS!06J<
B\!(prototype
'$!F
X6 W6_V0N!0B\!(I.B?n!?%,'3G'!g&!F
.F'8!9
..$)*
B\!('y*+%,0prototypeq!V%%!0\!O!V$GBB(?%%/
179
'8!9 B!<-Q3prototypen6'F!%JavaScript
'B`YV0 `
p/$1% !3Q??5|!%SX!F!, N
b!?6 n6a30F
'$!Array()' vTNW2join()' *+%,%/p/0?A!.F'8!9
join()'/, 5'=W:!./3$prototype
0Eprototype Z=>'I.
'$!'1n6?5YV0Function()'$!'%/%]6
Function()
r< )! var add = new Function('x', 'y',
'return x + y');
r< Q%+?-(V M
#+%,6 var add = function
(x, y) {return x + y};
'8!9!?\ %/' O!V$G0prototypen!<?vTN0, †!`B\!1%6
,!F' ;myFunction'8!+Gn8n6!S0,yprototype
`B\!1%6
`†!]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myFunction = function() {};
console.log(myFunction.prototype); // .*: object{}
console.log(typeof myFunction.prototype); // .*: 'object'
</script></body></html>
'8!9=W2!!?.3L=$2=Yprototype'$!'BYFunction()B
180
'8!9 B!<-Q3prototypen6'F!%JavaScript
'8!+*M+%/Nprototypej>XI1B('$!Fn6!1!0+%,bGXG!06 
'$!'O!G']Function()M'8!+!.0Y M
V0NB\!-prototype
0Eprototype-3%=e>^Object()
'8!9B!0<] =W2 N2prototype'8!9']B( 6
ry782
prototypeE?,`†!`B\!1prototypeEZ D
V0NJavaScript0cT6a(O6
'$!'O!%,Function()4O)I30L0(?!6'?ANW2 M
 2bG
!?F4E)]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myFunction = function() {};
'#$'@prototype†d@n
2Q9c{;B
myFunction.prototype = {};
†d@
2.*
console.log(myFunction.prototype);
</script></body></html>
E%!?F!.)2-316!!?'?,'F!/3VJavaScript
ABC.
'8!+'?uMwNW2B(?prototypeB\!2 '?'j2G
'>%JavaScript-1!A%%,JavaScript!8!9'j2
prototype'j624'?G!.%?`'sw
181
'8!9 B!<-Q3prototypen6'F!%JavaScript
0E W
f.@-.'] V
?2 #
N82prototype
@
'8!+=W2 `7S8prototype'/,=WYF!.%8Q9!.B(B\! A1prototype
'8!+GB\!'+/$-uFprototype#62E=$20I16 '$!''F!%
"AS?'?(*+%,!F'$!'B `B\!EY M
V0NnewO%]XB\!Y M
V0N!062
'8!96YV0N?B\!('+/$BF`39 `
uFv!wN/ '62'?prototype'!F'8!+
E=$2B\!('+/$-9 uFI1vMNJ!.\!V$&#MD+%,N%'$!
‹‹proto‹‹N
uFMJavaScript'8!+F!0\!(prototype'O!%,O!0y2'3+
'/,W(WYF7?/I1uFI16'$!prototype
'/, 
'8!+G'8!9;n!<?Pw0,prototype'$!''F!%Array()
d0B4B\!B!.Gn8BB(?%0,%6Array()'8!9‹‹proto‹‹
B\!('+/$ 5?]n!<
<!DOCTYPE html><html lang="en"><body><script>
",9?@{)@9+Z
QR# <?__proto__
Array.prototype.foo = 'foo';
var myArray = new Array();
.*fooJIOmyArray.__proto__ = Array.prototype
182
'8!9 B!<-Q3prototypen6'F!%JavaScript
console.log(myArray.__proto__.foo);
</script></body></html>
'8!+Gn8'$!(G#$!!j?6‹‹proto‹‹!BO@5#/ECMA-
B( o !/8&G#M3g2ECMAScripto !/8&
X?)<2`'sL!0.
B\!GuFnQSprototype'8!+*+%,Lb6EF}!+
constructor;n!<?7 =
g1!I16 ]n!<
<!DOCTYPE html><html lang="en"><body><script>
"*2o=`9mArray()'#$•+foo
Array.prototype.foo = 'foo';
var myArray = new Array();
'#$`GF
;E
E
fooL<$+;'')5(%
*.constructor.prototype
// .*: foo
console.log(myArray.constructor.prototype.foo);
'=+3+8–<2U%–**95BDprototype
console.log(myArray.foo) // .*: foo
'=+L<$=*+prototype?@'#$QdT
Array.prototype.foo
183
'8!9 B!<-Q3prototypen6'F!%JavaScript
</script></body></html>
'8!+fooB\!B?g 5'F!/3Vprototype
=W2qDNW2L
'8!+Gn8food0BB\!('+/$BFuF 5!0(?782Array()BF6
B\!prototype'$!'F!%Array()2 Array.prototype!Q%9!F 
myArray.__proto___62 myArray.constructor.prototypeGVN
Array.prototype
8H=>.Xiprototype=Object.prototype
'8!+#$!!j?prototype'/,'S9^Wh 4B\!B!prototype1
Object.prototypeB\!(';3V‚ D
V0N0,myArrayJ`'f!`'3Q1I6
B\!(4'8!9Gn8n6!S0,ymyArraytSG _!?F'f!.0(
'/,!.0prototype'8!+BtS2,fooB\!(myArray!1 56*6
'8!+BtS?%//EArray.prototype%/!
w2E!1 56*6
16X2W!(9^tSObject.prototype'8!+P*6foo!0\!(
'? !N%/'F!/'yr<undefined]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = [];
console.log(myArray.foo) // .*: undefined
184
'8!9 B!<-Q3prototypen6'F!%JavaScript
/*
'#$'9cQE
TG
5 foo?@myArray.fooBD
Array.prototype.fooBDObject.prototype.foo9cEFJi@O
?undefinedK
*/
</script></body></html>
0Pj'//tS =W2ˆ]XObject.prototype

B\!(Gv!wNO)2 E%$Object.prototype'].x,
for in
8Hprototype88=>! V_ #
0X 6#H
'/,Whn!A?'/,!?prototype'/,!1A'?n62*+%/%,
tS
B0\!(G'8!+a3$!03g26[F!/n!<?3)!0=Object.prototype
6Array.prototype'8!+'?Gn8n6!S$!0food$B4B\!
Array()B\! 5?'? !N%/Array.prototype]n!<
<!DOCTYPE html><html lang="en"><body><script>
185
'8!9 B!<-Q3prototypen6'F!%JavaScript
Object.prototype.foo = 'object-foo';
Array.prototype.foo = 'array-foo';
var myArray = [];
.*array-foo?@3m9Array.prototype.foo
console.log(myArray.foo);
myArray.foo = 'bar';
.*bar?@3m9myArray.foo
console.log(myArray.foo);
</script></body></html>
'?>N%,'F!/3Vfoo 5?Array.prototype.foo
'?foo 5?Object.prototype.foo'//tS'? =W2=I
,Xa3$!.`'8!9L!01#$!6%]'//!4'?M<N!0.%0%,
'//F2 4'S
0X:prototypegBR1bIpH \
 \
-3%-e
0Xconstructore>^
'8!+'g%X'?n%,B(??BprototypeJ!.$!(5'?g66
'8!+vI]G _,Lb-=B(constructorB\! 5?prototype
186
'8!9 B!<-Q3prototypen6'F!%JavaScript
!6LbF!. =]bGXG 8:
'$!'';3V!$YV$2Foo'8!+'?!f!!0\!!0g6y
prototype'8!9-9K6]B!0SyconstructorGVN#S82
Object ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Foo = function Foo(){};
'#[?@†d@2`Bprototype
Foo.prototype = {};
var FooInstance = new Foo();
.*false'm9}=2~*IO
console.log(FooInstance.constructor === Foo);
.*Object()NBOFoo()
console.log(FooInstance.constructor);
@•X
F
$ ?'z%;+Jdc
'#$'9cprototype
var Bar = function Bar(){};
var BarInstance = new Bar();
187
'8!9 B!<-Q3prototypen6'F!%JavaScript
console.log(BarInstance.constructor === Bar); // .*: true
console.log(BarInstance.constructor); // .*: Bar()
</script></body></html>
'8!9'?-0 M
#0bGprototype{!?$2zF`\!)I16 'g%X
E5%'0\!'A?Q%OOPJavaScript'>B'sw?JavaScriptA
'8!9uFNW2Lconstructor3Vj>N0, '$!'GVN%
'8!+VN('F!/constructor'SSQ'$!'GH92]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Foo = function Foo(){};
Foo.prototype = {constructor:Foo};
var FooInstance = new Foo();
console.log(FooInstance.constructor === Foo); // .*: true
console.log(FooInstance.constructor); // .*: Foo()
</script></body></html>
188
'8!9 B!<-Q3prototypen6'F!%JavaScript
-.0Xj=23prototypeR D
. I:;H
jB6
'8!+prototype'?K]2-QS%,!0\!(p/$?5 =W2'(!0 
'';3V‚ D
V0N0, !.G4'? !0,G62!1>62!.3W!(Bx0z>F
'$!Foo'8!+Pw0,yxB\!GprototypeB'+/$‚ D
V0N0,yFoo(),!F
FooInstance'?~0,yx'?KTSN0,yxB\!( 5?prototypey
B\! 5'?K]2Gn8%/B\!( =W2A0,6H92!.g0,
prototype]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Foo = function Foo(){};
Foo.prototype.x = 1;
var FooInstance = new Foo();
// .*r
console.log(FooInstance.x);
Foo.prototype.x = 2;
.*6
)'9)b!<42l78O
189
'8!9 B!<-Q3prototypen6'F!%JavaScript
console.log(FooInstance.x);
</script></body></html>
-?,6 >%?BtS'/,-?PL$:LZ5!3NBq/I1=W2B…2
B\!(-?%/ M
#0bG!j?x0z>F!
SS8
r?[,!prototypeL=$2*28:
B\!('?nTFY, E0!
gLF! 8!9!0\! M
#+%,6E%%,prototype'g%X
(3cI1UV;n!<?]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Foo = function Foo(){};
// %=RT9?@92.*Ny+
Foo.prototype = {x:1};
var FooInstance = new Foo();
// .*r
console.log(FooInstance.x);
Foo.prototype.x = 2;
.*6
)'9)b!<42l78O
console.log(FooInstance.x);
190
'8!9 B!<-Q3prototypen6'F!%JavaScript
</script></body></html>
)FprototypecR1bIp- \
-3%R1
D
H'] V
?2 #
N82
'8!9n%,%/L=$2Bx!?Fprototypep/$?5K=SN%,6#6j2!
'?Fu%/ 4B\!B'+/$‚ D
V0N!0 !
SS8aI1B(!0\!(prototype
'8!+'?B
XF5B\!g6 B\!('Z.O!0y2 5?prototypeB'8:
'8!9'?BF6B\!(B!/Y M
V0N?p/0BF{!XKTSNprototypeA
B\!(G!8!+'!gG62tS%/L=$2 !F!, N
b!? =IB( prototype
B\!(B!/YV0N?p/0G']!%6 'Q% L%,68: ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Foo = function Foo(){};
Foo.prototype.x = 1;
var FooInstance = new Foo();
.*r`c<c92O
console.log(FooInstance.x);
191
'8!9 B!<-Q3prototypen6'F!%JavaScript
'9cR<;+JzRB*prototype
2`BBObject()S* 6
8<%<5<m
Foo.prototype = {x:2};
.*r'9)aE
G
JDf_58DgxqOx
•X
F
<G Dprototypexc*
console.log(FooInstance.x);
/*
+FooInstance2Qprototype*!D6
3mJ2]
KSP
*/
';'<<5<m2Foo()
var NewFooInstance = new Foo();
'9cQ<5<_'$=*{;JDf_5
prototype]D-<5<_{x:2};&
console.log(NewFooInstance.x); // .*: 2
</script></body></html>
B\!(n%,*L=W2!01(3prototype2W2FE$!(5B\!g66
D
!0\!(FuMFN4p/$ 56G _,LIL6 !0\!(O!V$hFprototype4'3%+
192
'8!9 B!<-Q3prototypen6'F!%JavaScript
o/JEHJE8-.>P #
@ -
-3-.prototypeHH9@ =>%
3%/P M
#?.-Q3I1B']?cI1W(W2-22JavaScriptB!./3$
'8!+prototype
r< 'y Array.prototype'a3$*+%,B(?
n!<?!S0, *+%/?B'=N2 '>o!,2'0j?wNf'$!Fn6 O!V$&
E+%/Iu?0;JavaScriptB\!'yPersonNEN3MY$I]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function() {};
o=`9mPerson"#$•+legsBarmsBcountLimbs
Person.prototype.legs = 2;
Person.prototype.arms = 2;
Person.prototype.countLimbs = function() {return this.legs +
this.arms;};
var chuck = new Person();
console.log(chuck.countLimbs()); // .*: 4
</script></body></html>
'$!'[F!/n!<?'F!$YV$2Person()G!8!+zF!03g2y
193
'8!9 B!<-Q3prototypen6'F!%JavaScript
'8!+prototype'$!''F!%Person()I !0\!(?5!.y%,%6
'/,*+%,B's!/F-(FB(?%%,prototype!.?%/%'a30FJavaScript
'>'0=?wN? ',!,:!0\!('y!.
!0\!(!.K%'$!F' O!V$G1I1BL !3%,'3B'?'<:]2
B%8!+!.0YV0N?legs6arms#MD
,N2WG;n!<?3 BM!?=?NWG
'$!'Gr!?Person()-M
,NbG!2B\!('F!!8!+*M+%/N%/
'$!'MTNWG B\!('F!%!8!+ !?.0`-FL!0.!?1r62!?1]2
B%!-w2-QS%,I.F6'y6?!8!+>%,]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function(legs, arms) {
?@3m9 )Q'(>prototype
if (legs !== undefined) {this.legs = legs;}
if (arms !== undefined) {this.arms = arms;}
};
Person.prototype.legs = 2;
Person.prototype.arms = 2;
Person.prototype.countLimbs = function() {return this.legs +
this.arms;};
var chuck = new Person(0, 0);
194
'8!9 B!<-Q3prototypen6'F!%JavaScript
console.log(chuck.countLimbs()); // .*: 0
</script></body></html>
o/ :HCH(?@1
B\!(B'yB~>prototype'y6-,r, 5FU!?/1inheritance
chains'0\!'A1!3[TN%'A!> 5?'y{!?$2!SN%
E5% object oriented programming9^ 4B\!B!0\!(]2K( '%
JavaScript4'?c !0,G6E0'yIB\!(B'+/$O!V$G1EL!-(
'8!+prototype!8!+LKW2!1%!0\!(‚ D
V0N%'
!0\!K%,';3VChef'+/02 codyB!8!+Person()I16
B\!(!4'8!9M<NE=$20ChefB\!!.0t MSN/prototype'
!0\!‚ D
V0N%Person()B'+/$‚T.NW2L'y'?uF(6Person()
'8!9G'?!10/N6Chef.prototype 2 Chef.prototype =
new Person(); ]n!<
<!DOCTYPE html><html lang="en"><body><script>
var Person = function(){this.bar = 'bar'};
195
'8!9 B!<-Q3prototypen6'F!%JavaScript
Person.prototype.foo = 'foo';
var Chef = function(){this.goo = 'goo'};
Chef.prototype = new Person();
var cody = new Chef();
console.log(cody.foo); // .*: 'foo'
console.log(cody.goo); // .*: 'goo'
console.log(cody.bar); // .*: 'bar'
</script></body></html>
'>'0?wN?!0\!(E?%/I*!x0*+%,1[F!/n!<?c!0!-
=W2%Person()'?BP%+XObject()'8!+'g%Xprototype4!F
'8!+tS!0SKS!1I1H92prototype!.%?%S%
M'?'f!3'g%XObject()'8!9prototype2 !.YV$2%'$!'
Object.prototype!.yW2A%!8!+B
196
ZH:;<
-3 ><;Array()
9
B\!(6!3Q? ,!%-Q3Array()JavaScript
23%JEH-A@Array()
62 7!3!.W6~>F !Y M
V0N6B''?\!1'3Q?
o!.index!?A1!3Q?=W21EW2LI 38U!%3?B2 
?f 4
%F'O!?,2!.!8!9!0\!(%S!?0F! '?
O!?,2 N
!0\!(*D+% M
/!?0F'?BtS!3Q?*!:*M+%/N,!,24-(VF
L?X !8!+*+%/?B'=NJavaScript'F 4!3Q!x$associative
arrays'F%!3Q?'3…6a30F*!!0\!(*+%/NW2B(?B(
'3Q?'Q$-,r,F2;n!<?WT@9NY,myArrayBB(?Y,%6
? 4
o.!.Gn8numeric index
'F'3Q!S 4B\!(FLbW!Y,6
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = ['blue', 'green', 'orange', 'red'];
.*blueC*<$+<%OsQR#
'@,?@',*'==myArray
console.log(myArray[0]);

2`c?@?BO
'(%
'@,
var myObject = {
'blue': 'blue',
198
B\!(6!3Q? ,!%-Q3Array()JavaScript
'green': 'green',
'orange': 'orange',
'red': 'red'
};
console.log(myObject['blue']); // .*: blue
</script></body></html>
ABC.
LvI]62tSB(?6B4d$=2%SW2!3Q?B(?
#6j2
d0B!3Q?Array()B\!(B `
}!9`d$1Object()2
BYV0N?p/0=W2Array()!0\!1Object()
`
v!wN
r< '!g&n6zF!.G .length?o.3G'!g&!F
!.B=?wN?
8!0!F '3Q 5? !!VN elements
@C..Array()
`nQ3r!?'$!'G!1O!V$G%'3Q?'+/$T?NW2L0(?
r< '8!3F!.0F new Array('foo', 'bar');'$!'-%/W2B(?
Array()c!!
,6
199
B\!(6!3Q? ,!%-Q3Array()JavaScript
'$!'G`]6`-!TNWGB(Array()
r< '?-!?I1'?#$!6 r
62r‘•62rKs'8!+ &-!?qb'?*M+%/N%/lengthB6'3Q?
'3Q?-9  5'?*M+%/N]n!<
<!DOCTYPE html><html lang="en"><body><script>
var foo = new Array(1, 2, 3);
var bar = new Array(100);
console.log(foo[0], foo[2]); // .*: '1 3'
console.log(bar[0], bar.length); // .*: 'undefined 100'
</script></body></html>
=>'I  0EArray()
B\!(L?Array()!.y%n66!8!+O!0<%,!F ';!8!+
r< !8!+ Array.prototype
prototype
`@-.23=>'I  0EArray()
d0b!0\!(L?Array()n66!8!+O!0<%,!F ';n66!8!+
!.y%
200
B\!(6!3Q? ,!%-Q3Array()JavaScript
r< !8!+ var myArray = ['foo', 'bar']; myArray.length;
constructor
index
input
length
r< n6 var myArray = ['foo']; myArray.pop();
pop()
push()
reverse()
shift()
sort()
splice()
unshift()
concat()
join()
slice()
><;(?@1
!0\!('fYJavaScript-!?*+%,!F5'3QB\!O!V$GB(?new
'$!'G'!g&!FArray()Q%+?-(Vn!?%,62
'3Q?;n!<?‚ D
V$NY,myArray1'$!'*+%,!F!/'=N
201
B\!(6!3Q? ,!%-Q3Array()JavaScript
Array()'3Q?‚ D
V$NY,yB6myArray2Q%+?-(V]n!<
<!DOCTYPE html><html lang="en"><body><script>
';'<;'@,Array()
var myArray1 = new Array('blue', 'green', 'orange', 'red');
// .*: ["blue", "green", "orange", "red"]
console.log(myArray1);
,$9;'@,
var myArray2 = ['blue', 'green', 'orange', 'red'];
// .*: ["blue", "green", "orange", "red"]
console.log(myArray2);
</script></body></html>
!Q%+?-(VI1=W2v$W2!0B(Q%+?-(V'P\!VB
'$!'n!?%,X `
O!39GXG1Array()
ABC.
Q%+?-(V1EG|!%S%,!-!?
'=N'?'j2!.GTWh'3Q?O!V$G'sBx0z>F
'j2%SB's!/F!.0(6Y M
V0N%/!/
202
B\!(6!3Q? ,!%-Q3Array()JavaScript
><;=>c >e1
N
b'?;n!<?PwN0, o.2'3QG!4'?'!gGB(?
?o.30s[/%o!.3Bb!B( 'f!4'3QG0s!?!0/]l
WGB( #6j26o.j2'3QG'?'!gG%/L=$2-I0L92
?o.3G'? M
#3g20sM
m?%/'f!4'3QJavaScripto!.3?5
Fo.3qb-'"rundefined]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = [];
myArray[50] = 'blue';
.*0r&, ),7D<;+-
EFJIJS )"UDsQ0s'9);cblue
console.log(myArray.length);
</script></body></html>
'>'(!0'I9YF6 LbG'!gGJavaScript'>=W26JavaScript
`'1!/%`'>
!$!d$2 not strongly typedB(?6 4#6j24'3Q`'?K=SNW2B(?
M'?;n!<?NjfY, 4']?/4'?M'j2! 4
o.N 5?N'?W(W2
?o.3M 5?0s4B\!G]n!<
203
B\!(6!3Q? ,!%-Q3Array()JavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myArray = [];
myArray[50] = 'blue';
12Q'F
,'=+1>Object()
myArray[50] = {'color': 'blue'};
console.log(myArray[50]); // .*: 'Object {color="blue"}'
QR#9*+O'%9Cc—*<$+;
'#$Q !O'@,9?@C@color
console.log(myArray[50]['color']); // .*: 'blue'
// '#$QR#'()*L<$+
console.log(myArray[50].color); // .*: 'blue'
</script></body></html>
><;f G/!<
W=@+NW2B(?4'$!9nj62=W20I163QB OF!1D8!0M'3Q'j22
EF!V'3Q?!.!$!myArrray[0]
'3Q N
YV$2bG
rI1L(F6
1'?o.Wh`]6`'?!.s ns B( length1'3Q?r.3W2L
B2'3Q??o.3!?0F!. 5? -T<?N'3Q?ns=W2
s
204
B\!(6!3Q? ,!%-Q3Array()JavaScript
'?H%S%,blue'3Q? ;n!<? myArray?o.3s
1 !.s Wh4]64'?%S'3Q?#$!!j?B( r]n!<
<!DOCTYPE html><html lang="en"><body><script>
Cs',*'9)Q]5'blue'
var myArray = ['blue'];
console.log(myArray[0]); // .*: 'blue'
console.log(myArray.length); // .*: 1
</script></body></html>
0X&><;.(?@1lengthD
8. P
> #
.
'G]6?-!?0!F!, N
b!?Array()nsP!00(?
O!0<%,N'$!N'NDQN%,'!ScI16 !.%S%,% 2 !/'3Q?
!.\!V$G0'3Q?m?W2X6'3Q?nsugL=$2~%36
'3Q? ;!0!< ‚j.N0, myArrayc4nFnsuw$!0$2T2
lengtho.3W=@+N%'?!.GT?N$X6'3Q?s]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = new Array(3);
.*6
<7B6
9cd6
|dX
F
*IO
205
B\!(6!3Q? ,!%-Q3Array()JavaScript
console.log(myArray.length);
console.log(myArray[0]); // .*: undefined
</script></body></html>
ABC.
?o.-O!GG'3Q?!/v=Nns _,
1EF''? =SN?n%]3QB OF undefined
'?%S'3QO!V$GB(??BW!bG!?L0FnO!/%!?F
2 Q%+?-(V*+%,!FLbL0(?$ ]6'? var
myArray = [4]
0XdelengthgB 6>e1R1bIp)
'8!9lengthns nQS*M+%/NW2B(?'3QB\!( 5?
 5? B2GnugWhcr2!0Sg6!?6 Eg62'3Q?
'!gGG _,'3Q?undefined%/L=$21E%X!B( !.G
 5? B-2 Gn'?ug'3Q?B'"G
'3Q?]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = ['blue', 'green', 'orange', 'red'];
206
B\!(6!3Q? ,!%-Q3Array()JavaScript
console.log(myArray.length); // .*: 4
myArray.length = 99;
.*˜˜CNBOR(*(;*D2O
console.log(myArray.length);
<7B< )`9m*@7
C%'(;9'9)WE
G
+1
myArray.length = 1;
console.log(myArray[1]); // .*: undefined
console.log(myArray); // .*: '["blue"]'
</script></body></html>
><;b6 SX6 \
><;.b=><;
I9'I.
'?'j2WT@ N
+W2'3Q?W!(hFW!!j?JavaScript%SW2!3Q?B(?
H9:!3Q?%S%'3Q??/N%/Lb-3$!06JH92!3Q
!F: %'3Q?!F multidimensional array'9!3Q?Gn8!00(?
%S% Q%+?-(V!F '3Q;n!<?‚ D
V0N0, 'F?o:
%S%4'3Q!16F%S%6H92'3Q‚ D
VN0N0,!.9 64'3Q
o.34'Q$4'?s]n!<
207
B\!(6!3Q? ,!%-Q3Array()JavaScript
<!DOCTYPE html><html lang="en"><body><script>
var myArray = [[[['4th dimension']]]];
console.log(myArray[0][0][0][0]); // .*: '4th dimension'
</script></body></html>
W2B(?!3Q? =W2!.0.3W2%/L0( '3+, 'F!/3V =W2 `7S8
62 'V%?!3Q?Bc 2-?%/W2L0(?6H92 4!3Q%S
!F:
D<X D..6><;02RO/ 
']*+%,1'3Q8!0W6'sd,26u/F2while
!.%!.$G'3Q?'FBW6'3;n!<?LY,]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = ['blue', 'green', 'orange', 'red'];
'@,9RM5A$
'#$QR#'5dBhw"8B9f*_?
var myArrayLength = myArray.length;
var counter = 0; // 3EF
<{;
208
B\!(6!3Q? ,!%-Q3Array()JavaScript
'@,9RM>#D3EF
<J2q?5*
while (counter < myArrayLength) {
// .*: 'blue', 'green', 'orange', 'red'
console.log(myArray[counter]);
counter++; // '@r3EF
<Q
}
</script></body></html>
!.%FG'3Q?'!.$B6?!
w2!00(?6]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myArray = ['blue', 'green', 'orange', 'red'];
var myArrayLength = myArray.length;
,6
5B=R(5 q
6
<7BS*ˆ)DB')vX
F
*@
while (myArrayLength--) {
// .*: 'red', 'orange', 'green', 'blue'
console.log(myArray[myArrayLength]);
}
</script></body></html>
!]*+%,2b!?nO!/% M
#0bGfor!]=W21/!!01whileu/F2
209
B\!(6!3Q? ,!%-Q3Array()JavaScript
-.,2!.O=W2!Q+)H26-2 `'S% `
O@52!.6
210
5:;<
;2:HC8String()
10
'Q0-,r/ )!-Q3String()JavaScript
-3-A@String()
'$!'*M+%/NString()'6:'jQ0 !&6'jQ$!0\!O!V$&
'Q0-,r/O!V$G'3'!%3V7 T
g6Y,JavaScriptn!<]
<!DOCTYPE html><html lang="en"><body><script>
^_9'9L<$+%2new
';'<BString()
var stringObject = new String('foo');
// .*: foo {0 = 'f', 1 = 'o', 2 = 'o'}
console.log(stringObject);
console.log(typeof stringObject); // .*: 'object'
'F
BD'F
,'=+
';'<String()
6
‚;
^_9'9L<$+L<l78new
var stringObjectWithOutNewKeyword = String('foo');
console.log(stringObjectWithOutNewKeyword); // .*: 'foo'
// .*: 'string'
console.log(typeof stringObjectWithOutNewKeyword);
'F
BD'F
,'=+
&NdB';'<LE
<$=G
+- 
212
'Q0-,r/ )!-Q3String()JavaScript
var stringLiteral = 'foo';
console.log(stringLiteral); // .*: foo
console.log(typeof stringLiteral); // .*: 'string'
</script></body></html>
@C..String()
'$!'-String()‚ D
VN$Y, !1‡!V$G N?'Q0'//1]6
r!
>%?;n!<?stringObject'Q0'//%SIfoo ]n!<
<!DOCTYPE html><html lang="en"><body><script>
'F
,'=+2
var stringObject = new String('foo');
// .*: 'foo {0="f", 1="o", 2="o"}'
console.log(stringObject);
</script></body></html>
ABC.
'$!'BY M
V0N?!0\!(String()'?(*M+%/N!0
"AS?newLb-H !3%W2A6 ` `
!0\!1!.
-?%S?-!V?/F LbB
XF'j6:'Q0-,r/*+%/6
213
'Q0-,r/ )!-Q3String()JavaScript
-!?!.L6typeof-!?N,bGJtypeof'?
object'?B
XF'Q0-,r/!0\!(string!.%%
'6:'Q0-,r/*+%,-.,:6d,:BE=$2G'!gG
=>'I  0EString()
B\!(L?String()!.y%n66!8!+O!0<%,!F ';!8!+
r< !8!+ String.prototype
prototype
r< n6 String.formCharCode();
fromCharCode()
`@-.23=>'I  0EString()
d0b!0\!(L?String()!8!+O!0<%,!F ';n66!8!+
!.y%n66
r< !8!+ var myString = 'foo'; myString.length;
constructor
length
r< n6 var myString = 'foo'; myString.toLowerCase();
charAt()
charCodeAt()
214
'Q0-,r/ )!-Q3String()JavaScript
concat()
indexOf()
lastIndexOf()
localeCompare()
match()
replace()
search()
slice()
split()
substr()
substring()
toLocaleLowerCase()
toLocaleUpperCase()
toLowerCase()
toString()
toUpperCase()
valueOf()
215
?bI:;<
I9Number()
11
 : V !S-Q3Number()JavaScript
-3-A@Number()
'$!'*M+%/NNumber()'j6:' O!V$&6' !0\!O!V$&
' O!V$G's7 T
g6Y,JavaScript;n!<?]n!<
<!DOCTYPE html><html lang="en"><body><script>
^_9'9L<$+%]3<2new
';'<BNumber()
var numberObject = new Number(1);
console.log(numberObject); // .*: 1
console.log(typeof numberObject); // .*: 'object'
L<$+%'F
BD'53<'9c
';'<Number()JB3new
var numberObjectWithOutNew = Number(1);
// .*: 1
console.log(numberObjectWithOutNew);
// .*: 'number'
console.log(typeof numberObjectWithOutNew);
'F
BD'53<'9c
&NdB';'<LE
<$=G
+-
var numberLiteral = 1;
console.log(numberLiteral); // .*: 1
217
 : V !S-Q3Number()JavaScript
console.log(typeof numberLiteral); // .*: 'number'
</script></body></html>
?I9 ;I9
 :W(W2!GJavaScript'SS8 2integers!.$?/ 'V 262
'?\!4'8!b` 2 !
w2 floating point!62!
SS8 ';3V‚ D
VN$Y,
D m4\!)4n!?%,<21I16 !62!V 6JavaScript]n!<
<!DOCTYPE html><html lang="en"><body><script>
var integer = 1232134;
console.log(integer); // .*: '1232134'
var floatingPoint = 2.132;
console.log(floatingPoint); // .*: '2.132'
</script></body></html>
ABC.
!
w2 :B%B(?V#/*!x0!Fhexadecimal62*!x0
$!?<octalJavaScript
 !E3$X6` !$LbB(
218
 : V !S-Q3Number()JavaScript
@C..Number()
'$!'I9YNumber()‚ D
V0N0, !.Z D
V0N%,%' '?1]6
r!
,!F! !0\!;n!<?numberOne'?%SŒ0™]n!<
<!DOCTYPE html><html lang="en"><body><script>
var numberOne = new Number(456);
console.log(numberOne); //.*: '456{}'
</script></body></html>
ABC.
'$!'BYV0N?p/0Number()'?(!.+%/$!0
"AS?new' O!V$G0A%W2A ` `
!0\!1
'$!'*+%,!FNumber()/F !.0
XF'j6:*+%,
-!?!.L6-?%S?-!V?typeof-!?N,bGJ
typeof'?B
XF' !0\!('?number!.%%
'6:' *+%,-.,:6d,:BE=$2G'!gG
=>'I  0ENumber()
B\!(L?Number()';!8!+
r< !8!+ Number.prototype
219
 : V !S-Q3Number()JavaScript
MAX_VALUE
MIN_VALUE
NaN
NEGATIVE_INFINITY
POSITIVE_INFINITY
prototype
`@-.23=>'I  0ENumber()
d0b!0\!(L?Number()!8!+O!0<%,!F ';n66!8!+
!.y%n66
r< !8!+ var myNumber = 5; myString.constructor;
constructor
r< n6 var myNumber = 1.00324; myNumber.toFixed();
toExponential()
toFixed()
toLocaleString()
toPrecision()
toString()
valueOf()
220
?=@_:;<
2Boolean()
12
'0? V$!<-Q3Boolean()JavaScript
-3-A@Boolean()
'$!'*+%/NW2B(?Boolean()G'!g&!F'0!0\!O!V$&
-T<?N%6'6:'0?true62false
'0?O!V$G7 T
g6Y,JavaScript;n!<?]n!<
<!DOCTYPE html><html lang="en"><body><script>
^_9'9L<$+%?)(*2new
';'<BBoolean()
var myBoolean1 = new Boolean(false);
console.log(typeof myBoolean1); // .*: 'object'
<+%'F
BD')(*'9c
';'<Number()L<$+JB3new
var myBoolean2 = Boolean(0);
console.log(typeof myBoolean2); // .*: 'boolean'
'F
BD')(*'9c
&NdB';'<Q<=G
+-
var myBoolean3 = false;
// .*: 'boolean'
console.log(typeof myBoolean3);
// .*: false false false
console.log(myBoolean1, myBoolean2, myBoolean3);
222
'0? V$!<-Q3Boolean()JavaScript
</script></body></html>
@C..Boolean()
'$!'Boolean()2 '0'?Gn=SN,I]6
r!I9Ytrue62
false'?'j2JavaScript#/s62-062null62false62NaN62undefined62
'f!'Q$'/,//Gn=SN%,true!?1]2B0B0\!;n!<?‚ D
V0N0,
true9;6false]n!<
<!DOCTYPE html><html lang="en"><body><script>
QdEF
9G
9{+Boolean()sufalse
?%Bfoo = false
var foo = new Boolean(0)
console.log(foo);
QdEF
9G
9{+Boolean()Mathutrue 
?%Bbar = true
var bar = new Boolean(Math)
console.log(bar);
</script></body></html>
223
'0? V$!<-Q3Boolean()JavaScript
ABC.
'$!'BYV0N?p/0Boolean()'?(!.+%/$!0
"AS?new'0O!V$G0A%W2A ` `
!0\!1
'$!'*+%,!FBoolean()/F !.0
XF'j6:*+%,
-!?!.L6-?%S?-!V?typeof-!?N,bGJ
typeof'?B
XF' !0\!('?boolean!.%%
'6:'0?*+%,-.,:6d,:BE=$2G'!gG
=>'I  0EBoolean()
B\!(L?Boolean()';!8!+
r< !8!+ Boolean.prototype
prototype
`@-.23=>'I  0EBoolean()
d0b!0\!(L?Boolean()!8!+O!0<%,!F ';n66!8!+
!.y%n66
r< !8!+ var myBoolean = false; myBoolean.constructor;
constructor
r< n6 var myBoolean = false ; myBoolean.toString();
toSource()
toString()
valueOf()
224
'0? V$!<-Q3Boolean()JavaScript
& 9a223falseR1H
true
'?b'6:f'0?!0\!(false'$!'BYV0N?Boolean()1
GB\!('?nS%%,6 4B\!B!true'?6b'0B\!O!V$G0!%!F6
false'$!'Boolean()GnS%%,!./3$'?Whtruen!<?7 T
g6Y,
0B\!'?M%N%,P;true'? !0,GBffalseE]n!<
<!DOCTYPE html><html lang="en"><body><script>
var falseValue = new Boolean(false);
'9)Bq?)(*2*5<false
DQ6
B3"*E
;G
true
console.log(falseValue);
/*
'9)"q')(*9"*@9%–"*`9m
false;E
G
+true
š
if (falseValue) {
console.log('falseValue is truthy');
}
</script></body></html>
225
'0? V$!<-Q3Boolean()JavaScript
'$!'*+%,!'04'?G'0f'?-S% M
#A%]bG
Boolean()"AS?'?(W6 newd0B4B\!B
XF`'62`'0`'? !N%,6
Boolean
(59q)false true
P%+-S%F `
[%:W:H92I[S%/:B( !F!, N
b!?
'?#$!bG '0Gs62-062null62false62NaN62undefined
'/,62
'f!'Q$//Gn=SN%/falseH92'?'j26JJavaScript'F!,'?!
Gn=SN%,Itrue
r< M'0?M'?N-D?%/M4#MD+%,NbG
if (true) {}; ]n!<
<!DOCTYPE html><html lang="en"><body><script>
E
;G
+' )`9mfalse
console.log(Boolean(0));
console.log(Boolean(-0));
console.log(Boolean(null));
console.log(Boolean(false));
console.log(Boolean(''));
console.log(Boolean(undefined));
console.log(Boolean(null));
E
;G
+' )`9mtrue
console.log(Boolean(1789));
226
'0? V$!<-Q3Boolean()JavaScript
j',*'==false')(*9'9)X
F
T9G
8jfalse
console.log(Boolean('false'));
console.log(Boolean(Math));
console.log(Boolean(Array()));
</script></body></html>
!.S%,%1!vW26wBJavaScriptGfalse!=W2W26
GnS%,BFtrue
227
?c_:;<
;2:HC8Z.:.
 92 I9
13
'6:'0?6 :6'Q0-,r/-!% Vt!<-Q3JavaScript
R10 @.223%R1 9H
!0X
B\!(-!NW2B(?'0?6 :6'Q0-,r/'6: =W2Lj0(FX
r< !8!9b ture.toString()!0%6!S?F!0\!('6:L-D!$!0
‚ D
V0N%/!.!8!9Gn8JavaScript('6:'?'F!%'$!'B!0\!
Gn8B!0\!.%$F6 Q0qIF'?n662!8!+Gn8BB(?%$
B\!(qbvMISN/!8!+
!0\!1'6:=W2!?!.6t]3)'F!%(F!07?/'cI1
!.S%/3VB\!('6:-D!$!0!0$21'S6JavaScript
4B\!G
 D
5N%,yB6!8!+Gn8BB(?%$(JavaScript!12 '624'?GM'?
=W26KSI!.3W2:JavaScripta(P9LLb-3
'Q0-,r/B`n!<]n!<
<!DOCTYPE html><html lang="en"><body><script>
1*Stringg2E
G
+
var stringObject = new String('foo');
console.log(stringObject.length); // .*: 3
console.log(stringObject['length']); // .*: 3
2Q'F
BI',*'==REF
+
229
'6:'0?6 :6'Q0-,r/-!% Vt!<-Q3JavaScript
2<*
var stringLiteral = 'foo';
console.log(stringLiteral.length); // .*: 3
console.log(stringLiteral['length']); // .*: 3
console.log('bar'.length); // .*: 3
console.log('bar'['length']); // .*: 3
</script></body></html>
 :B`n!<]n!<
<!DOCTYPE html><html lang="en"><body><script>
1*Numberg2E
G
+
var numberObject = new Number(1.10023);
console.log(numberObject.toFixed()); // .*: 1
console.log(numberObject['toFixed']()); // .*: 1
2Q'F
BI'53<'9)REF
+
2<*
var numberLiteral = 1.10023;
console.log(numberLiteral.toFixed()); // .*: 1
console.log(numberLiteral['toFixed']()); // .*: 1
console.log((1234).toString()); // .*: '1234'
console.log(1234['toString']()); // .*: '1234'
230
'6:'0?6 :6'Q0-,r/-!% Vt!<-Q3JavaScript
</script></body></html>
'0?B`n!<]n!<
<!DOCTYPE html><html lang="en"><body><script>
1*Booleang2E
G
+
var booleanObject = new Boolean(0);
console.log(booleanObject.toString()); // .*: 'false'
console.log(booleanObject['toString']()); // .*: 'false'
2Q'F
BI')(*9'9)REF
+
2<*
var booleanLiteral = false;
console.log(booleanLiteral.toString()); // .*: 'false'
console.log(booleanLiteral['toString']()); // .*: 'false'
console.log((true).toString()); // .*: 'true'
console.log(true['toString']()); // .*: 'true'
</script></body></html>
ABC.
f!.$22 )!'j62' '?'8!9Gn8n6!S$!0
r< B\!(E%!- '?S
X62!0 >%4'$@+
(1).toString()621..toString()M%NlB%$!0g6b!?B(
231
'6:'0?6 :6'Q0-,r/-!% Vt!<-Q3JavaScript
n8*M+%/NI-!?a6'V'8!3!.$2'$n62
B\!!8!9G
[ 92 I ;2JEH D
'IU
'F!%(d,21'0?62 :62'Q0-,r/-T<?N%'6:
Q%+!.()6
' ?% [,!GD'!g&!'j6:*+%,!6:'!fLA
-!?„!$typeof4'/,MB\!YV$2 !0\!62'j62 '?L\!V$G'3
-!?n/4'04'?624 624'Q$typeof1'?Ld$=W2object!2
-!?/'6: M
#+%,typeofSd0%S'Q$'/,

r< '? typeof 'foo'„!0W(jstringj
';3V[,!7 T
g6Y,]n!<
<!DOCTYPE html><html lang="en"><body><script>
n
')(*n
'9)Bn
3<Bn
',n
'=="*2
console.log(typeof new String('foo')); // .*: 'object'
console.log(typeof new Number(1)); // .*: 'object'
console.log(typeof new Boolean(true)); // .*: 'object'
n
')(*n
'9)Bn
3<Bn
',n
'=='F
BD c
232
'6:'0?6 :6'Q0-,r/-!% Vt!<-Q3JavaScript
console.log(typeof 'foo'); // .*: 'string'
console.log(typeof 1); // .*: 'number'
console.log(typeof true); // .*: 'boolean'
</script></body></html>
-!??%LA!$FW!bGtypeof62'Q0-,r/'6:v%
'$!n6*+%,!.0]H !3%W2L'0?62 :String()
6Number()6Boolean()
233
?Z:;<
null
14
'? VF-Q3nullJavaScript
JEH-A@null
'?*+%,L0(?nullbG!? '?L?XB\!(!8!9H]GW2UTQN(
W2AR!,:B 4
/4']!%f'?LB(!4'?%S%`'8!9# M
DN
g
'?-M?%/Nnull'f!'8!+L'?=W2G!)€]n!<
<!DOCTYPE html><html lang="en"><body><script>
'#$foon
'9c3*+y*
Q'<%89c{;h*+null
var myObjectObject = {foo: null};
console.log(myObjectObject.foo); // .*: 'null'
</script></body></html>
ABC.
BFu+Xnull6undefined-M?%/NundefinedBJavaScript
!2 `
e!$!!Z)=W2q!9&null
=W2G!)&!FLU!?/` 5.
F%f'?LB(!.G'? !0,G%'8!+
:.typeof#Hobjectnull
-!? M
#+%,bGtypeof'?nullN/objectG M
#A%]bG6
1'?=W2B[S%null!.0[S%%'?#$!WGx01!<?-S!
235
'? VF-Q3nullJavaScript
G'6!/null-!?;n!<?*+%/0,uuu'?-!%$!0$2BY%null
]n!<
<!DOCTYPE html><html lang="en"><body><script>
var myObject = null;
.*object'_*Z6
'))7<=BO
console.log(typeof myObject);
.*true )'))B=9@Onull'
console.log(myObject === null);
</script></body></html>
ABC.
'?B[S%!0null*+%,}]!uuu-!?=W:uuX
BF•T3Nnull6undefined
236
?m.E:;<
undefined
15
'? Va!+-Q3undefinedJavaScript
-A@undefined
'?-?%/NundefinedJavaScriptB3%+Bg>
r< !=>%=W2G!)&1~fn62Bv. var foo'?EGM0/N
f!.Gn8n6!S%6B\!('F!%'8!+ =W2G!)€.$!<~>!2
'/,!
w2'=#/6 ,XI.F'8!95X2 ' prototype
'?*+%,M%sLY,undefinedJavaScript]n!<
<!DOCTYPE html><html lang="en"><body><script>
>k5,
var initializedVariable;
console.log(initializedVariable); // .*: undefined
EFJD<EF
2UJavaScript"3Dundefined
console.log(typeof initializedVariable);
var foo = {};
.*undefined'#$<m|@Obar?@foo
console.log(foo.bar);
EFJD<F
2UJavaScript'9)"3Dundefined
console.log(typeof foo.bar);
238
'? Va!+-Q3undefinedJavaScript
</script></body></html>
ABC.
'>7?/$W2B/S%/?BJavaScript*+%/W2undefinedu
G>%?]2'?uwWYFL/307?/ j
X2Aundefined2
foo = undefined*+%,LbB
XFL6null  M
#0WG
'!S'xS%f'8!+62>%?'? =W2G!)&
E8@JavaScript ECMA-262gk #
 r. c_/0M
FundefinedJ,=>
Bt!<8&'F!/8&a(JavaScript ECMA-262!!>%L?
E?,undefinedWh'?EGM0/N6E0 `
U=Q>%?=W:6 *!n!A?` 5
>%?'?undefined1undefined]n!<
<!DOCTYPE html><html lang="en"><body><script>
EFJD<2UundefinedLR_9?@
>
console.log(undefined in this); // .*: true
</script></body></html>
239
?GI8:;<
[e 
16
'jg!n6 Vo !/-Q3JavaScript
-3-A@Math
B\!(%SMath'0!,n6 6!8!9static62 :g!-!%
r< 'g!#Fy Math.PI'>B=?wNB\!(I1JavaScript?%X6
'$!'Math()!0\!O!V$&
ABC.
B\!(W2L!f6MathL=$2Bf 4vSF2
'$!'E0'+/$‚ D
V0NMath()
=W26 LIFLXB(
JavaScriptLB\!(I1uw
-3 I 0XMath
B\!(L?Math';n66!8!+
r< !8!+ Math.PI;
E
LN2
LN10
LOG2E
LOG10E
PI
SQRT1_2
SQRT2
241
'jg!n6 Vo !/-Q3JavaScript
r< n6 Math.random();
abs()
acos()
asin()
atan()
anat.()
ceil()
cos()
exp()
floor()
log()
max()
min()
pow()
random()
round()
sin()
sqrt()
tan()
Math
D
@ D
I$8
B\!(MathB\!(! !/'Zj.N?!0\!(BcfEF!VNXMath'!w%,X`YM
V0N
242
'jg!n6 Vo !/-Q3JavaScript
`'s5XE=$2=I *!:-!%0*+%,r@1!A6'0!/n66!8!+
B'+/$O!V$&Math
`'$!F`' 5XbG
-3Math!)FZ8^$oU
B\!(!8!9B<(Math1#FyBP%+I1W:6 !.%?>B(?X
!0\!(>%?'JavaScript
r<  4v]YF!8!+cI1MIN%/
Math.PIvS'F!%/F'$!n6BF6'%F!<!8!+BFu+XM4vSF
!.%?>B(?X `
!8!91!8!+L's!/F 
ABC.
'+/$#FyP%F*+%/?7M?/NX JavaScript 1.5, ECMA-262
!Bo !/8&B( t!<8&ECMAScript2 ES6Bj?w
"AS?'?(const#F<P%
243
 97
.
*
'5 n6:[S?JavaScript
'<mL1!%$6 R!%(I.LOO!0y2E%?W(W2A!';u0e T
+N
R!%(!.0KS%I-Q3G5!!.?.3WG6Bj?%F'$-2 E% 
`!.W=@+N6 `O!?,2!.%!8!+B'?ABB\!(PY%
!O)-(B(?JavaScript!0\!1?!JB\!q,L/W2
=W2Wo!0L!?,O6/1I16!0\!(!.%!B(?'j6:6
 4O)-JavaScriptB\!1
"AS?'?('$!'O!%,!F!0\!(Y M
V0Nnew-(V*+%,62
!0\!(B'0jd$2O!V$&Q%+?
!0\!!.=$22 !0\!1'$!n6Function()!0\!O!V$GB(?!%!F6
!0\!-9 JavaScript
TJavaScript 1'$!Fn6 /Object()6Array()6String()
6Number()6Boolean()6Function()6Date()6RegExp()6Error()
'$!n6String()6Number()6Boolean()N.W!%3…6!.
'6:'!BBj(?%0,IJ'5!S0L%!0\!T6'6:
!0\!(
null6undefined6/string/6rs6true6false'j62`1
B\!(!.%!bGXG '0\! 's!.a6
'$!n6%/N!0Object()6Array()6String()6Number()
245
'5 n6:[S?JavaScript
6Boolean()6Function()6Date()6RegExp()6Error()*+%,!F
"AS?'?(new ?B\!( ?/`B\!YVN0/ complex object
'6:/string/6rs6true6falsee\!Q9Be\!Q9'j2L?X
‚ D
V0N%,4IZ0]6!0\!(-!NW2G!0\!(JavaScript!%_!0\!a(O6
!0\!(L'!B(??B-A
!2 A>%?G!.N%?p M
/0N%/p M
/0N!06!.D%?F'6:W=@+N
'5?p M
/0N%/p M
/0N!06!.%5?FW=@+N.?>%?
!0\!(!2'?!FH6!/%!0H9:'6:G'6!/'6:W(
B\!(a3$GW>%?V!0H6!/%%?
!0\!Wh?!0\!('s/FJavaScript'(!0 !.$YF/%
'>JavaScript'>o!,2'0=?wN?!0\!(!8!9=W20I16-%'F!
4#6j2!.B(?*+%/?B'=N?!0\!(6
62u0*+%,B\!(!8!9nQS62tS62ugB(?
B\!('8!9,W(!0o:*+%,-w:B o:*+%,
r< "AS'?-T<N?W262-() Array['prototype']
['join'].apply()
'/,*M+%/N%/B\!(!8!9GVN$!0prototypeB\!('+/$tS
'8!9!.0t MSN/q!01!.M<NWh'M+%/N?prototype'
246
'5 n6:[S?JavaScript
'8!+'?=W:6 L!01!.M<NWG6JB\!('$!prototype
`YV0N `B\!1
'$!'BObject()'8!+'8!+BtS%/prototype
'$!'Object()2 Object.prototype'8!+M<NWG6J
'8!+cI1MM%N%/L!01undefined
'/,-T<?prototype 5?'y'sJavaScriptB\!(B'y2
prototype
'/,tS/FprototypeBK!0\!(?5=Wh !.0'y2
Object()'8!9 =W:prototypeB\!1!./3$Object()
n6JavaScript6!8!9!.!0\!1
"AS?'?(thisG!)€`'!`'s1 !4' -9 *M+%/N!0
'%SIB\!(
"AS?'?('?thisE%/NI•!/O!0F->V%O!0y2 =SN
'
"AS?'?(*+%,0this/\B\!(GVN%/*!n!A?
'>*+%/JavaScriptX!A?O!V$&n6
TJavaScript3)?5E5%In!A?16*!n!A?JavaScript
-M?%/NX!A?B'/, !.wF-9 'V%?n6! 8Q9 n6‚ D
V0N
>%?]2'?BtS
247
'5 n6:[S?JavaScript
•!, !?%6w!Fa63V'F!%'sO!0Fn!A?'/, =SN
%]n=62E#MTNIn!A?Gn8!F'7?/I16 O!%,X
'AF!%O!V$GG[,! _ P%+ 4
•!,B'L#%,
'>?closures
*+%,W6 ' -9 '=N?>%?6F!%varB( '! 4!8!97Q%,
!.!A%,'n!A-9  5?!?%
W6 '=N?>%?6n6var/\B\!( 4!8!97Q%,*!n!A?
*+%,!F'=?>%?6n6var
'! 4>%7Q%,*!n!A?
248
=@_7
0CE
*
'8r+ $!<[S?JavaScript
'%(-?P.3%'"r!?!F 6@W(W2R!%(I.LOF52
JavaScript'>F4'!4' W(W262!.+%/%JavaScript3V%(%
G
r!)
r W(!F%(aE=$:R!%(I1L3(BB%!Sr6 LF'8!+
I1B!.I92%!?L?.p T
,(';R!%(OGL]2!01B6 '>
H92geS3%6PV(%/(6R!%(JavaScript
JavaScript: The Good Parts, by Douglas Crockford
JavaScript Patterns, by Stoyan Stefanov
Object-Oriented JavaScript, by Stoyan Stefanov
Professional JavaScript for Web Developers, by Nicholas C. Zakas
High Performance JavaScript, by Nicholas C. Zakas
250